4.虚函数

虚函数是父类提供给子类的一个函数接口,这不是实际存在的函数,在子类中可以重写该函数。声明虚函数的关键词是virtual,其实这是解决父类指针和子类指针交错的一种方法。如果用一个父类的指针想调用子类的方法是不行,因为父类的内存大小比子类的小,访问不了子类的方法。但虚函数就可以做到。

我们先看下不是虚函数的情况:

#include<iostream>
class Father
{
public:
	Father()
	{
		std::cout << "from Father\n";
	}
	void show()
	{
		std::cout << "father\n";
	}
	~Father()
	{
		std::cout << "delete Father\n";
	}
};
class Child :public Father
{
public:
	Child()
	{
		std::cout << "from Child\n";
	}
	void show()//和父类的同名函数
	{
		std::cout << "child\n";
	}
	~Child()
	{
		std::cout << "delete Child\n";
	}
};
void main()
{
	Father f;
	Father *pf;
	pf = &f;
	pf->show();//调用父类方法
    Child c;
    pf=&c;
    pf->show();//想通过父类指针调用子类方法
	system("pause");
}

用父类指针调用子类方法失败。

对程序作出以下修改:

	virtual void show()//把父类的show函数定义为虚函数
	{
		std::cout << "father\n";
	}

把父类的函数定义为虚函数后,父类指针可以调用子类的方法。这是虚函数最大的作用,通过父类提供的接口,在子类中多种实现。虚函数的使用的函数还支持在父类重载,但不能出现和虚函数同名、参数个数、类型一样的非虚函数。

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/84584869