题目

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++中名字隐藏,名字查找优先于类型检查相关推荐

  1. 「命名空间内部使用的名字的查找」与「类成员定义中使用的名字的查找」的区别

    二者都是向外查找,即本级作用域里没有找到,就向上一级的作用域去找这个名字出现的地方.区别就在于: 「命名空间内部使用的名字的查找」最终以全包围的全局命名空间结束: 「类成员定义中使用的名字的查找」如果 ...

  2. linux 按名字查找文件夹,详细解读linux系统中使用Find命令查找文件

    摘要:文件查找是一个经常用到的功能,在linux系统中查找文件的命令比较多:find.locate.whereis .which等,今天心月就来详细解读find文件查找命令的使用. 文件查找是一个经常 ...

  3. 【C++grammar】名字隐藏与重定义

    目录 1.继承中的名字隐藏 1.基类同名函数被隐藏的现象描述 2.问题理解 3.避免现象 2.重定义 1.现象描述 2.重定义与重载的区别 3.能否使用 using 将基类成员引入到派生类定义中 1. ...

  4. python db文件_python中查看.db文件中表格的名字及表格中的字段操作

    1.问题描述: 我桌面上有一个"账号密码.db"文件,我现在想知道里面有几张表格table.表格的名字.表头结构. 2.使用SQL语句"""selec ...

  5. 【C++】C++标准中定义的名字和标识符

    标识符 identifier C++中标识符有明确的定义,对保留的标识符也有明确的说明. 标识符是任意长的字母/字符,数字,下划线的序列.但是有效标识符必须以非数字起头,且是大小写敏感的,标识符中的每 ...

  6. java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)

    Javamail 中附件中文名字乱码祥解 (转)[@more@]现在研究JavaMail的人越来越多,现在我就谈谈在javamail中大家都会遇到的附件中文问题,由于sun的java的中文问题,导致当 ...

  7. C语言:运行中获取宏名字的技巧

    C语言:运行中获取宏名字的技巧 在调试C语言程序时,有时需要打印宏的名字.可以通过定义宏,宏名字的数组来获得. 例如: [cpp] view plaincopy #include <stdio. ...

  8. 打印出ntdll.dll中所有函数名字和地址

    0x01 打印出ntdll.dll中所有函数名字和地址 0x02 在任何进程中都可以找到ntdll.dll和kernel32.dll这个动态链接库的基地址,另外每一个动态链接库基地址实际上都存放在一个 ...

  9. C# 创建Excel,读取mdb数据库,写入Excel数据,获取mdb中所有表格名字,选择多个文件

    C# 创建Excel,读取mdb数据库,写入Excel数据,获取mdb中所有表格名字,选择多个文件 1.创建Excel表 使用OleDbCommand类执行SQL语句即可,代码如下 /// <s ...

  10. as3中得到swf文件中的链接名字

    以前自己写编辑器的时候需要读取一个flash生成的swf文件 然后得到swf中的链接名字 就是这个样子,然后我从网上找了好多例子都没有很好的,最后用swf的文件结构实现了读取swf中链接的工具 今天有 ...

最新文章

  1. android 高德定位 区域,区域定位-行政区划浏览-示例中心-JS API UI 组件示例 | 高德地图API...
  2. MRP例外消息处理方法
  3. react-native run-android报错的原因,SDK位置未指定
  4. 一个问题就可以辨别真假NLP(自然语言处理)研究者
  5. 大小不固定的图片、多行文字的水平垂直居中
  6. iOS底层探索之类的结构—cache分析(上)
  7. 聊一聊,小程序的开发
  8. getchar与getch函数的区别
  9. LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)
  10. java 抽象类命名_Java命名规范
  11. 英文投稿的一点经验【转载】
  12. mysql中一些字节如何计算_在MySQL中将字节值计算为兆字节(MB)?
  13. 2017携程java后台开发工程师暑期实习生招聘面试经验分享
  14. 计算机中电容状态表示什么,电脑主板电容坏了的表现有哪些?
  15. 微信订阅号之政府认证
  16. 电脑屏幕录制软件哪个好用?推荐这2款!
  17. iOS 百思不得姐 项目
  18. 别忽略国美之争的真正遗产
  19. torch.distributions.normal,torch.distributions.normal.log_prob,torch.distributions.normal.rsample
  20. 分布式调度框架Elastic-Job和xxl-job区别

热门文章

  1. java collection_【基础篇】java-Collection集合-List和Set
  2. 达观杯文本分类——基于N-gram和LogisticRegression
  3. 杂谈(13)第二期办公技能交流分享活动深层次总结
  4. perl删除Windows下的图片缓存缩略图(Thumbs.db)
  5. MVC中使用编辑器提交内容时出错的解决方法
  6. pytorch梯度的自动求取
  7. Python实现信号滤波(基于scipy)
  8. springboot pom.xml实战(com.mchange与c3p0配置)
  9. JVM 新生代,老年代,永久代
  10. VCenter 5.5 数据库过大造成的问题和解决方法