栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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)在派生类内部,使用父类::方法()的方式,可以强制绕过隐藏规则,调用父类实现的那一个。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号