【C++】基类和派生类中同名成员问题

当派生类和基类中各自实现一个内容不同但函数名和参数类型完全相同的方法时,会怎样?

答案是:基类对象调用的是基类的方法,派生类对象调用执行的是派生类中重新提供的方法。

这种派生类中同名同参方法替代掉基类方法的现象,叫做:重定义(redefining),也有人叫做隐藏。隐藏特性生效时派生类中实际同时存在2份同名同参(但在不同类域名中)的方法,同时都存在,只是一个隐藏了另一个。

//基类 person.cpp
void person::speak(void) {
    cout << "person speak" << endl;
}

//派生类 man.cpp
void man::speak(void) {
	cout << "man speak" << endl;
}

// 如何调用基类的方法
void man::test(void)
{
	//speak();			// 其实等于this->speak(),所以其实调用的是当前对象的speak方法
	man::speak();
	person::speak();	// 这样就可以显式指定调用父类的speak方法,绕过了隐藏规则
}

派生类中如何访问被隐藏的基类方法:

(1)派生类对象直接调用时,隐藏规则生效,直接调用的肯定是派生类中重新实现的那一个。

(2)将派生类强制类型转换成基类的类型,再去调用则这时编译器认为是基类在调用,则调用的是基类那一个,隐藏规则被绕过了。

(3)在派生类内部,使用父类::方法()的方式,可以强制绕过隐藏规则,调用父类实现的那一个。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值