派生类向基类转换的可访问性
来源:互联网 发布:visio网络图标库vss 编辑:程序博客网 时间:2024/06/06 15:11
感觉基类、派生类的关系是很微妙的,派生类向基类转换的可访问性,C++ Primer(中文5版,Ch15.5)给出了三句解释说明:
- 只有当Derived公有继承Base时,用户代码才能使用派生类向基类的转换;如果Derived继承Base是protected或private,则用户代码不能使用该转换。
- 不论Derived以什么方式继承Base,Derived的成员函数和友元都能使用派生类向基类的转换;派生类对于其直接基类的类型转换对于派生类的成员和友元来说永远是可访问的。
- 如果Derived继承Base的方式是public或protected,则Derived的派生类的成员和友元可以使用Derived向Base的类型转换;反之,如果Derived继承Base的方式是private,则不能使用。
下面说明之:
第一句话,这句话应该好懂。第一句话的意思用代码写出来如下所示:
class Base{ // code segment...};class D1 : public Base{ // code segment...};class D2 : protected Base{ // code segment...};class D3 : private Base{ // code segment...};int main(){ D1 d1 = new D1(); D2 d2 = new D2(); D3 d3 = new D3(); Base B1 = d1; // publiuc继承,正确 Base B2 = d2; // protected继承,错误 Base B3 = d3; // privat继承,错误}
第二句话的意思写成代码如下所示:
class Base{public: fun(); // others... };class Derived : public Base{public: friend void UseBaseFun(Base b); void TestFun(Base b);}void UseBaseFun(Base b){ b.fun();}void Derived::TestFun(Base b){ b.fun();}int main(){ Derived d1 = new Derived(); Derived d2 = new Derived(); // 参数是派生类向基类的转换,正确 d2.UseBaseFun(d1); d2.TestBase(d1); retunr 0;}
第三句话翻译成代码如下所示,需要加以说明的是,subDerived继承Derived的方式不影响:
class Base{public: fun(); // others...};class Derived : public/protected/private Base{};class subDerived : public Derived{public: void Test3rdSen(Base b);};void Test3rdSen(Base b){ b.fun();};int main(){ Derived d = new Derived(); subDerived sd = new subDerived(); /* 如果subDerived继承Derived的方式是public或protected下面这句 话正确,如果继承方式是private,则下面这句话是错误的 */ sd.Test3rdSen(d);}
以上三句话的理解全是个人理解,若有异议,可以留言或私信
0 0
- 派生类向基类转换的可访问性
- 派生类向基类转换的可访问性
- 派生类向基类类型转换的可访问性
- c++派生类向基类转换的可访问性
- 派生类转换到基类的可访问性
- 派生类到基类转换的可访问性
- 派生类到基类转换的可访问性
- 《C++ Primer》派生类到基类转换的可访问性
- c++ 初学 派生类到基类转换的可访问性
- C++ 派生类到基类转换的可访问性
- 派生类到基类转换到可访问性
- 1.4派生类向基类的类型转换
- 派生类向基类的自动类型转换
- C++ 派生类到基类转换的可访问性(是否可以转换)
- C++笔记:派生类到基类转换到可访问性
- 派生类到基类转换的可访问性——新解
- 派生类对基类的访问
- C++中派生类和基类的转换和访问控制
- python多线程编程----threading模块
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
- 【读书笔记:C++ primer plus 第六版 中文版】第8章 函数探幽
- svn日常维护
- java 免费发送短信实例程序
- 派生类向基类转换的可访问性
- android属性动画详解2
- WebRTC 学习笔记(2)--libjingle 部分 (P2P传输)
- 【ASP.NET】验证控件
- ALSA声卡驱动中的DAPM详解之七:dapm事件机制(dapm event)
- Behavioral模式之Observer模式
- 透过IT大佬的高考专业选择,你的兄弟姐妹可以取得哪些“真经”?
- 设计模式学习之简单工厂+反射+配置文件
- Javadoc详解(二)