虚函数

class Father
{
public:
	virtual ~Father()
	{
		cout<<"destruct father"<<endl;
	}
	void nationality()
	{
		cout<<"nationality is China"<<endl;
	}
	void born()
	{
		cout<<"was born in China"<<endl;
	}
	virtual void appearance(std::string str = "handsome")
	{
		cout<<"He is "<<str<<endl;
	}
};

class Daughter:public Father
{
public:
	Daughter(std::string name)
	{
		cout<<name<<endl;
	}
	~Daughter()
	{
		cout<<"destruct daughter"<<endl;
	}
	void born() //隐藏了父类的born,即使参数不同
	{
		cout<<"was born in HongKong"<<endl;
	}
	virtual void appearance(std::string str = "pretty") override  //覆盖父类的版本,可以不加virtual,实际上也是虚函数,
	{
		cout<<"She is "<<str<<endl;                          
	}
};

void main()
{
	// f的静态类型是Father*,动态类型是Daughter*
	Father *f = new Daughter("Li Liang");  

	//父类的born不是虚函数,(编译时已绑定)静态绑定,所以派生类最好不要重用基类中的名字,除非是覆盖继承而来的虚函数
	f->born();

	//父类的appearance为虚函数,动态绑定,多态性,默认参数由静态类型决定
	f->appearance();

	//不存在从基类向派生类的隐式类型转换,f转换为d是安全的,使用static_cast来强制覆盖编译器的检查
	Daughter *d = static_cast<Daughter *>(f);
	d->born();
	delete f;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值