c++ 虚函数覆盖

#include<iostream>
using namespace std;

struct B {
	virtual void f()const { cout << "\tB::f" << endl; }
	void g()const { cout << "\tB::g" << endl; }
};
struct D :B {
	void f()const { cout << "\tD::f" << endl; }  //与B::f类型相同,覆盖B::f
	void g() { cout << "\tD::g" << endl; }       //与D::g类型不同,未覆盖B::g
};
struct DD :D {
	void f() { cout << "\tDD::f" << endl; }      //不是const类型,与D::f类型不同,未覆盖D::f
	void g()const { cout << "\tDD::g" << endl; } //与D::g类型不同,但与B::g类型相同
};
void call(const B&b) 
{
	b.f();
	b.g();
}

int main() {
	B b;
	D d;
	DD dd;

		cout << "B:" << endl;
	b.f();//B::f
	b.g();//B::g

	cout << "D:" << endl;
	d.f();//D::f
	d.g();//D::g

	cout << "DD:" << endl;
	dd.f();//DD::f
	dd.g();//DD::g

	cout << "call B:" << endl;
	call(b);
	cout << "call D:" << endl;
	/*
	调用call(d)时,因为D类中f()为虚函数覆盖了B类的f(),所以call(d)下d.f()的运行结果为:D::f,相当于执行D类的私有函数。
	而call(d)下d.g()的运行结果为B::g。
	*/
	call(d);

	cout << "call DD:" << endl;
	/*
	调用call(dd)时,因为DD类中f()函数与D类的不同,不覆盖,所以call(dd)下dd.f()的运行结果为:D::f,相当于执行D类中的f()函数。
	而call(dd)下dd.g()的运行结果为B::g,因为DD类中的g()函数与D类中不同,所以再往上回溯,运行结果为B::g。
	*/
	call(dd);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值