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";
	}

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值