代码辨析cpp隐藏(hide)和覆盖(override)

// 隐藏与覆盖的混杂
#include <iostream>
using namespace std;

class C1 {
public:
	virtual void f() { cout << "C1::f()" << endl; }
};

class C2 : public C1 {
public:
	virtual void f(int i) { cout << "C2::f(int)" << endl; }
};

class C3 : public C2 {
public:
	virtual void f() { cout << "C3::f()" << endl; }
	virtual void f(int i) { cout << "C3::f(int)" << endl; }
};

int main() {
	C1 c1, *p1;
	C2 c2, *p2;
	C3 c3, *p3;
	//p1
	p1 = &c1;
	p1->f();	//C1::f()
	p1->f(3);	//c1类的视野范围只有f(),没有f(int)故此处会报错
	p1 = &c2;	
	p1->f();	//在c1类指针的视野下可以看见被隐藏的函数f() C1::f()
	p1->f(3);	//c1类的视野范围只有f(),没有f(int)故此处会报错
	p1 = &c3;
	p1->f();	//在c1类指针的视野下可以看见被隐藏的函数f() C1::f()
	p1->f(3);	//c1类的视野范围只有f(),没有f(int)故此处会报错
	//p2
	p2 = &c2;
	p2->f();	//在c2类中f()被f(int)给隐藏,故此处调用会报错
	p2->C1::f();	//调用被隐藏的函数智能“点名道姓”
	p2->f(3);	//C2::f() 
	p2 = &c3;
	p2->f();	//在c2类中f()被f(int)给隐藏,故此处调用会报错
	p2->C1::f();	//调用被隐藏的函数智能“点名道姓”
	p2->f(3);	//C3::f() 多态性
	//p3
	p3 = &c3;
	p3->f();	//C3::f()
	p3->f(3);	//C3::f(int)
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值