EffectiveC++学习笔记-条款32|33
来源:互联网 发布:勒夏特列原理 知乎 编辑:程序博客网 时间:2024/06/09 20:09
条款32 确定你的public继承是is-a的关系
条款33 避免遮掩继承而来的名称
确定你的public继承是is-a的关系
在所有public继承的背后,一定要保证父类的所有特性子类都可以满足(例如:父类能飞,子类一定可以飞)。抽象起来说,就是在可以使用父类的地方,都一定可以使用子类去替换。
避免遮掩继承而来的名称
看一个示例:
class Base{public: virtual void func() = 0; virtual void func(int) { cout << "Base::func(int)"<<endl;}};class Derived : public Base{public: virtual void func() {cout << "Derived::func()"<<endl;}};int main(int argc, char *argv[]){ Derived d; int val = 1; d.func(); d.func(val);//这句话肯定会报错 因为子类的func覆盖了基类的函数 return 0;}
derived class内的名称会掩盖base class内的名称。
使用using声明式,可以让Base class内名为func的所有东西在Derived作用域内都可见。
如下:
class Derived : public Base{public: using Base::func; virtual void func() {cout << "Derived::func()"<<endl;}};...//打印结果Derived::func()Base::func(int)
这样就能正常运行了。
阅读全文
0 0
- EffectiveC++学习笔记-条款32|33
- EffectiveC++学习笔记-条款2
- EffectiveC++学习笔记-条款3
- EffectiveC++学习笔记-条款4
- EffectiveC++学习笔记-条款7
- EffectiveC++学习笔记-条款8
- EffectiveC++学习笔记-条款9
- EffectiveC++学习笔记-条款10
- EffectiveC++学习笔记-条款11
- EffectiveC++学习笔记-条款12
- EffectiveC++学习笔记-条款13
- EffectiveC++学习笔记-条款14
- EffectiveC++学习笔记-条款38
- EffectiveC++学习笔记-条款45
- EffectiveC++学习笔记-条款46
- EffectiveC++学习笔记-条款47
- EffectiveC++学习笔记-条款48
- EffectiveC++学习笔记-条款49
- Linux
- 病毒、木马、蠕虫与恶意代码关键点
- TCP定时器讲解与TCP三次握手四次挥手
- 《java并发编程实战》笔记(第10章)
- KMP--找子串
- EffectiveC++学习笔记-条款32|33
- 结构算法 002 单链表的头插法和尾插法
- webView之post请求携带请求头及打印日志等剖析
- 前端经典面试题1
- python 字典
- 我的C程序设计语言学习日记#03
- 一维数组、二维数组、字符串总结
- JTable使用实例
- java自带工具生成Webservice客户端代码(UTF-8编码格式)