函数覆盖及其使用举例

       覆盖是指派生类中如果存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致。覆盖函数和被覆盖函数只有函数体不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本。

       覆盖的特征为在不同的范围中(分别位于派生类与基类)的函数,函数名字相同,函数参数相同,基类函数必须有virtual关键字,覆盖的示例代码如下:

#include<iostream>
using namespace std;

//定义基类
class Boy
{
public:
	virtual void g(void)
	{
		cout << "Boy::handsome!" << endl;//函数体
	}
};

//定义派生类
class Girl:public Boy
{
public:
	virtual void g(void)
	{
		cout << "Girl::beautiful!" << endl;//和上面的基类对比,只有函数体不同
	}
};

int main()
{
	Girl d;
	Boy *pb = &d;
	pb->g();
	system("pause");
	return 0;
}

运行结果:

Girl::beautiful!

请按任意键继续. . .

    上面的代码中,虚函数Boy::g(void)被Girl::g(void)覆盖,从而在子类中产生了一个新的函数。

问题:什么时候发生函数覆盖?

   覆盖在继承时派生类对于抽象类或者接口声明的方法的具体实现时使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值