Effective C++读书笔记(33)
来源:互联网 发布:怪物世界源码 编辑:程序博客网 时间:2024/05/21 09:49
条款33:避免遮掩继承而来的名称
对于继承的父类中的函数,如果在子类中有同名的函数,则父类中的同名函数都将被隐藏,例如:
class Base{private:int x;public:virtual void mf1() = 0;virtual void mf1(int x);virtual void mf2();void mf3();void mf3(doubel);};class Derived : public Base{public:virtual void mf1();void mf3();void mf4();};Derived d;int x;d.mf1();d.mf1(x) //错误,父类中的mf1同名的函数被子类中的函数名隐藏d.mf2(); //调用父类的mf2函数d.mf3()d.mf3(x)//错误, 父类中的mf3同名的函数被子类中的函数名隐藏d.mf4();
在上面的例子中,base类中的mf3、mf4和mf1中的所有同名字的函数都被子类中的函数给隐藏了,即使是参数类型不同
的或者virtual和no-virtual函数都是有同样的效果的!为了能够防止父类中的同名函数被隐藏我们可以在子类中用using来引入父类
的成员函数如:
class Derived : public Base{public:using Base::mf1;using Base::mf3;virtual void mf1();void mf3();void mf4();};
在public继承的体系中,子类不应该要隐藏父类的成员函数,因为这样就与public继承的原理要背驰,public继承就是保证
父类的所有函数在子类中都是相同的!在子类中主动的调用父类的成员函数我们可以通过Base::mf1来实现!
请记住:
- Drived classes内的名称会遮盖带Base class内的名称,在public继承体系中这样做事不合适的!
- 为了让被遮掩的名称那个再见天日,可以使用using声明或者转交函数(即在子类函数中主动调用父类的函数通过Base::mf1)
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《Effective c++》读书笔记
- 《more effective c++》读书笔记
- <<effective c++>> 读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- Effective C++(1)读书笔记
- Effective C++(2)读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《effective c++》读书笔记【一】
- 《effective c++》读书笔记1
- 《effective c++》读书笔记2
- 《effective c++》读书笔记3
- 《effective c++》读书笔记4
- 《effective C++》读书笔记
- Effective C++-读书笔记
- lhgdialog
- 快速排序 平均时间复杂度 分析(random pivot)
- WPF 获取主程序(主窗口)对象
- 提示框进度条第三方库之MBProgressHUD
- ie6下面关于html编码问题导致的js出错,css不被应用
- Effective C++读书笔记(33)
- 【Kissy WaterFall】实行手动加载数据
- 容易忘记的命令
- oracle Wallet的使用
- GIS中的基本算法之判断点是否在直线上
- LightOJ 1289 LCM from 1 to n (节省空间的素数筛法+n个数的最小公倍数)
- VC中常见的108个问题
- 让Windows7的Explorer默认打开“我的电脑”
- MAC下用VirtualBox跑ubuntu的一点经验