虚函数与纯虚函数

虚函数的作用是在父类中定义函数时,尚未知道由哪个子类来调用的情况下,提供一种自动指向,有点类似 java 的向上转型的意思,还是看代码吧,如果没有使用虚函数

#include <iostream>

using namespace std;

class animal
{
public:
	void shout()
	{
		cout<<"animal"<<endl;
	}
	void call_shout(animal *a)
	{
		a->shout();
	}
};
class dog : public animal
{
public:
	void shout()
	{
		cout<<"wang"<<endl;
	}
};
int main()
{
	animal a;
	dog d;
	a.call_shout(&d);
}

输出是

animal

使用虚函数之后

#include <iostream>

using namespace std;

class animal
{
public:
	virtual void shout()
	{
		cout<<"animal"<<endl;
	}
	void call_shout(animal *a)
	{
		a->shout();
	}
};
class dog : public animal
{
public:
	void shout()
	{
		cout<<"wang"<<endl;
	}
};
int main()
{
	animal a;
	dog d;
	a.call_shout(&d);
}

输出是

wang

至于纯虚函数,就是父类只声明,不定义,留给子类去定义,有点像 java 的 interface

#include <iostream>

using namespace std;

class animal
{
public:
	virtual void shout() = 0;
};
class dog : public animal
{
public:
	void shout()
	{
		cout<<"dog"<<endl;
	}
};
class cat : public animal
{
public:
	void shout()
	{
		cout<<"cat"<<endl;
	}
};
int main()
{
	dog d;
	d.shout();
	cat c;
	c.shout();
}

输出是

dog
cat

另外,关于这个内容,这里有篇文章写的不错,http://www.cnblogs.com/MS-Fran…

Leave a Reply

Your email address will not be published. Required fields are marked *