Avoid hiding inherited names


作用域(scopes)所带来的名称二义性,c++编译器会寻找指涉(refer to)的对象并实现名称遮掩规则(name-hiding rules)。

寻找指涉对象的顺序,由内到外依次寻找。

继承会导致遮掩(破坏is-a)

但如下代码:

class Base {
public:
virtual void mf1() = 0;
virtual void mf1(int);
void mf3();
void mf3(double);
}; class Derived : public Base {
public:
virtual void mf1();
void mf3();
void mf4();
};
...
Derived d;
d.mf1(10); // ERR
d.mf3(10); // ERR

当子类的成员与父亲类有相同的名字时,父类的重名函数不再继承。

这是为了防止你从疏远的基类继承重载函数。但这样做则不是一个完全的 is-a关系。

使用using关键字

则你可以这么做,在derived类中添加

using Base::mf3;
using Base::mf1;

或者使用inline转交函数(forwarding function)。

对于变量的转交,我们有两种处理方法:

1、inline转交(并非正确行为)

2、完美转发

Effective C++ 笔记:条款 33 避免继承导致的名称遮掩的更多相关文章

  1. Effective C++:条款33:避免遮掩继承而来的名称

    (一) 以下这段代码: int x; void someFunc() { double x; //local variable std::cin>>x; //read a new valu ...

  2. [Effective JavaScript 笔记]第33条:使构造函数与new操作符无关

    当使用函数作为一个构造函数时,程序依赖于调用者是否记得使用new操作符来调用该构造函数.注意:该函数假设接收者是一个全新的对象. 一个例子 function User(name,pwd){ this. ...

  3. Effective C++笔记:继承与面向对象设计

    关于OOP 博客地址:http://www.cnblogs.com/ronny 转载请注明出处! 1,继承可以是单一继承或多重继承,每一个继承连接可以是public.protected或private ...

  4. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective C++笔记(六):继承与面向对象设计

    参考:http://www.cnblogs.com/ronny/p/3756494.html 条款32:确定你的public继承塑模出is-a关系 “public继承”意味着is-a.适用于base ...

  6. Effective C++ Item 33 避免遮掩继承过来的名称

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie ? 不懂 c++为什么derived classes 内的名称要遮掩 base classe ...

  7. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  8. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  9. 《More Effective C++》 条款5 谨慎定义类型转换函数

    ---恢复内容开始--- C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换 ...

随机推荐

  1. HTTP和HTTPS协议,看一篇就够了

    https://blog.csdn.net/xiaoming100001/article/details/81109617 因为http请求是无状态的,所以需要三次握手.四次挥手来确定状态. 大纲 这 ...

  2. POC iis短文件名

    __author__ = '*'# -*- coding:utf-8 -*- from lib.httpparse import httpparse def verify(protocol,ip,po ...

  3. Unity4.3.4 安装出现 pattern not found

    第一次破解不成功,第二次破解的时候就会出现这个错误 删除C:\ProgramData\Unity里面文件后,再重启后点击Manual Activation,出现的对话框是是保存当前序列号?重新加载序列 ...

  4. 把nginx当完全tcp端口转发器

    在nginx.conf里加入 stream {     server {         listen 18443;         proxy_pass 58.xxx.xxx.xxx:8443;   ...

  5. SQL 字段修改

    1.修改字段名: alter table 表名 rename column A to B 2.修改字段类型: alter table 表名 alter column 字段名 type not null ...

  6. python3基础-set

    集合:无序的,不重复的数据组合 作用: 1.去重,把一个列表变成集合,就自动去重了 2.关系测试,测试两组数据之前的交集.差集.并集等关系 set和dict类似,也是一组key的集合,但不存储valu ...

  7. border三角形

    border:100px solid ; box-shadow: inset 0 1px,inset 1px 0px,inset 0 -1px,inset -1px 0px; width:0px; h ...

  8. FreeMarker案例

  9. Taro之使用百度地图

    适配h5的时候要使用地图功能获取位置,选取了百度地图.首先在index.html文件引入. <script type="text/javascript" src=" ...

  10. weui复选框无法传值

    //原来的反了 function changeState (ele) { if(ele.checked){ ele.setAttribute('checked','checked') console. ...