C++中名字隐藏,名字查找优先于类型检查
题目
C++中名字隐藏是什么?
解答
让我们通过一个例子来讲解C++中的名字隐藏。在C++中,如果一个类里有一个重载的方法, 你用另一个类去继承它并重写(覆盖)那个方法。你必须重写所有的重载方法, 否则未被重写的方法会因为名字相同而被隐藏,从而使它在派生类中不可见。
请看例子:
class FirstClass{ public:virtual void MethodA(int);virtual void MethodA(int, int); }; void FirstClass::MethodA(int i){cout<<"ONE"<<endl; } void FirstClass::MethodA(int i, int j){cout<<"TWO"<<endl; }
上面的类中有两个方法(重载的方法),如果你想在派生类中重写一个参数的函数, 你可以这么做:
class SecondClass : public FirstClass{ public:void MethodA(int); }; void SecondClass::MethodA(int i){cout<<"THREE"<<endl; }int main (){SecondClass a;a.MethodA(1);a.MethodA(1, 1);return 0; }
上面的main函数中,第2个MethodA在编译时会报错,提示没有与之匹配的函数。 这是因为两个参数的MethodA在派生类中是不可见的,这就是名字隐藏。
名字隐藏与虚函数无关。所以不管基类中那两个函数是不是虚函数, 在这里都会发生名字隐藏。解决方法有两个。第一个是将2个参数的MethodA换一个名字, 那么它在派生类中就可见了。但我们既然重载了MethodA,说明它们只是参数不同, 而实际上应该是在做相同或是相似的事的。所以换掉名字并不是个好办法。因此, 我们一般采用第二种方法,在派生类中重写所有的重载函数。
转载于:https://www.cnblogs.com/wuchanming/p/4154402.html
C++中名字隐藏,名字查找优先于类型检查相关推荐
- 「命名空间内部使用的名字的查找」与「类成员定义中使用的名字的查找」的区别
二者都是向外查找,即本级作用域里没有找到,就向上一级的作用域去找这个名字出现的地方.区别就在于: 「命名空间内部使用的名字的查找」最终以全包围的全局命名空间结束: 「类成员定义中使用的名字的查找」如果 ...
- linux 按名字查找文件夹,详细解读linux系统中使用Find命令查找文件
摘要:文件查找是一个经常用到的功能,在linux系统中查找文件的命令比较多:find.locate.whereis .which等,今天心月就来详细解读find文件查找命令的使用. 文件查找是一个经常 ...
- 【C++grammar】名字隐藏与重定义
目录 1.继承中的名字隐藏 1.基类同名函数被隐藏的现象描述 2.问题理解 3.避免现象 2.重定义 1.现象描述 2.重定义与重载的区别 3.能否使用 using 将基类成员引入到派生类定义中 1. ...
- python db文件_python中查看.db文件中表格的名字及表格中的字段操作
1.问题描述: 我桌面上有一个"账号密码.db"文件,我现在想知道里面有几张表格table.表格的名字.表头结构. 2.使用SQL语句"""selec ...
- 【C++】C++标准中定义的名字和标识符
标识符 identifier C++中标识符有明确的定义,对保留的标识符也有明确的说明. 标识符是任意长的字母/字符,数字,下划线的序列.但是有效标识符必须以非数字起头,且是大小写敏感的,标识符中的每 ...
- java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
Javamail 中附件中文名字乱码祥解 (转)[@more@]现在研究JavaMail的人越来越多,现在我就谈谈在javamail中大家都会遇到的附件中文问题,由于sun的java的中文问题,导致当 ...
- C语言:运行中获取宏名字的技巧
C语言:运行中获取宏名字的技巧 在调试C语言程序时,有时需要打印宏的名字.可以通过定义宏,宏名字的数组来获得. 例如: [cpp] view plaincopy #include <stdio. ...
- 打印出ntdll.dll中所有函数名字和地址
0x01 打印出ntdll.dll中所有函数名字和地址 0x02 在任何进程中都可以找到ntdll.dll和kernel32.dll这个动态链接库的基地址,另外每一个动态链接库基地址实际上都存放在一个 ...
- C# 创建Excel,读取mdb数据库,写入Excel数据,获取mdb中所有表格名字,选择多个文件
C# 创建Excel,读取mdb数据库,写入Excel数据,获取mdb中所有表格名字,选择多个文件 1.创建Excel表 使用OleDbCommand类执行SQL语句即可,代码如下 /// <s ...
- as3中得到swf文件中的链接名字
以前自己写编辑器的时候需要读取一个flash生成的swf文件 然后得到swf中的链接名字 就是这个样子,然后我从网上找了好多例子都没有很好的,最后用swf的文件结构实现了读取swf中链接的工具 今天有 ...
最新文章
- android 高德定位 区域,区域定位-行政区划浏览-示例中心-JS API UI 组件示例 | 高德地图API...
- MRP例外消息处理方法
- react-native run-android报错的原因,SDK位置未指定
- 一个问题就可以辨别真假NLP(自然语言处理)研究者
- 大小不固定的图片、多行文字的水平垂直居中
- iOS底层探索之类的结构—cache分析(上)
- 聊一聊,小程序的开发
- getchar与getch函数的区别
- LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)
- java 抽象类命名_Java命名规范
- 英文投稿的一点经验【转载】
- mysql中一些字节如何计算_在MySQL中将字节值计算为兆字节(MB)?
- 2017携程java后台开发工程师暑期实习生招聘面试经验分享
- 计算机中电容状态表示什么,电脑主板电容坏了的表现有哪些?
- 微信订阅号之政府认证
- 电脑屏幕录制软件哪个好用?推荐这2款!
- iOS 百思不得姐 项目
- 别忽略国美之争的真正遗产
- torch.distributions.normal,torch.distributions.normal.log_prob,torch.distributions.normal.rsample
- 分布式调度框架Elastic-Job和xxl-job区别
热门文章
- java collection_【基础篇】java-Collection集合-List和Set
- 达观杯文本分类——基于N-gram和LogisticRegression
- 杂谈(13)第二期办公技能交流分享活动深层次总结
- perl删除Windows下的图片缓存缩略图(Thumbs.db)
- MVC中使用编辑器提交内容时出错的解决方法
- pytorch梯度的自动求取
- Python实现信号滤波(基于scipy)
- springboot pom.xml实战(com.mchange与c3p0配置)
- JVM 新生代,老年代,永久代
- VCenter 5.5 数据库过大造成的问题和解决方法