1. 只有当D公有继承B时,用户代码才能使用派生类向基类的转换;如果D私有继承B的方式是受保护的或者私有的,则用户代码不能使用该转换。

class A {};
class B : public A {}void function(const A&) {}int main()
{B b;function(b); // 这时就可以使用function(b),会默认把B类型转换成A类型。
}

2. 不论D以什么方式继承B,D的成员函数和友员函数都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员函数和友员函数来说永远是可访问的

class B {}class D : private B  //这里以private或者protected或者public 都可以
{void f(){B* base = new D;  //编译正确}
}

如果不是成员函数(即用户代码),例如:

class B {};
class D : private B {};  //如果这里是public就可以,private或protected会错int main()
{B* b = new D;    //会出现编译错误,注意,这是用户代码
};

3. 如果D继承B的方式是public或者protected,则D的派生类的成员或者友员可以使用D向B的类型转换;反之,如果D继承B的方式是private,则不能使用。

class B {};
class D : public B {}; //public或protected都可以class E : private D // 或者protected D或者public D
{void f(){B* b = new D;   //可以编译通过D* d = new E;   //可以编译通过,这就是2介绍的情况。}
};

【C++ Priemr | 15】派生类向基类转换的可访问性相关推荐

  1. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    一.不能自动继承的成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初 ...

  2. 派生类到基类的转换 和基类到派生类的转换

    一. 基类与派生类的转换     3种继承方式(公用.保护.私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能.     不同类型数据之间在一定条件下可以进行类型的转换.基类与派生 ...

  3. 派生类对基类成员的访问控制之公有继承

    公有继承 前面说过,派生类从基类继承时有三个步骤, 第一个步骤是吸收基类成员,吸收了基类中除构造函数和析构函数之外的所有数据成员和函数成员, 第二个步骤就是修改基类成员,包括修改对基类成员的访问属性和 ...

  4. 派生类从基类继承的过程

    派生类从基类继承的过程 派生类从基类继承的过程可以分为三个步骤:吸收基类成员.修改基类成员和添加新成员. 吸收基类成员就是代码复用的过程,修改基类成员和添加新成员实现的是对原有代码的扩展,而代码的复用 ...

  5. C++学习记录:派生类向基类转换及其可访问性

    知乎有很多博主学不会了一言不合就抄书,我觉得这对学习计算机科学是一样的. 这里说一个自己或许也有许多人都会也不太注意的点,派生类向基类转换及其可访问性,抄自<C++ Primer>. 派生 ...

  6. 6-4 派生类使用基类的成员函数

    6-4 派生类使用基类的成员函数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 按要求完成下面的程序: 1.定义一个Animal类,成员包括: (1)整数类型的私有数据成 ...

  7. 不同派生方式下基类成员在派生类中的可访问范围属性

    不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...

  8. C++ 类继承:构造函数与析构函数调用顺序,派生类和基类之间的特殊关系,公有继承及其他

    文章目录 一.派生类构造函数与基类构造函数 二.创建与销毁派生类对象时,构造函数和析构函数的调用 三.派生类和基类之间的特殊关系 四.公有继承 (一).何为公有继承 (二).多态公有继承 (三).虚函 ...

  9. C++ 多继承类 虚基类

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/jzj_c_love/article/d ...

最新文章

  1. ORACLE 11G 搭建dataguard详细步骤(所有操作总结)
  2. mybatis3 添加ehcache支持
  3. Java8 时区DateTime API
  4. java时间类Date、Calendar及用法
  5. js java cookie_js cookie 工具
  6. 腾讯微信惊天漏洞,利用手机号致帐号丢失无法找回!——论个人信息安全与防护...
  7. LINUX SHELL为awt指定分隔符
  8. [挖坟] 突破WINISO未注册时100M限制
  9. 优酷kux视频文件转换成mp4格式
  10. LeetCode刷题之1818. 绝对差值和
  11. 给Jetson Nano更换eMMC闪存(扩容)
  12. 洛阳地铁一号线无人驾驶_无人驾驶超级拖拉机现身洛阳
  13. linux格式化u盘fat32,linux下格式化u盘
  14. 软件项目经理应具备的素质和条件_软件项目经理素质能力的必备要求
  15. MUI前端代码生成快捷键
  16. abstract 的用法
  17. SSH免密登陆功能配置
  18. Chipscope run卡住问题Sample Buffer has 0 samples
  19. GEE学习笔记:在Google Earth Engine(GEE)中计算坡度、坡向、山体阴影
  20. 干货!7年投稿经验总结教你这样回复审稿意见更有效!

热门文章

  1. jquery 获取easyui combobox选中的值
  2. Delphi 一些函数解释
  3. tomcat启动java项目_Java web项目启动Tomcat报错解决方案
  4. mock模拟接口测试 vue_在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟...
  5. python消息队列中间件_python-RabbtiMQ消息队列
  6. 芝枝.计算机与人文科学,计算机与人文科学
  7. java pkcs1转pkcs8_pkcs1与pkcs8格式RSA私钥互相转换
  8. avframe转byte数组_C# amp; VB6.0 图像与二维数组 互转
  9. 如何通过浏览器在所有响应内容中查找文本
  10. kotlin中判断字符串_Kotlin程序查找字符串中字符的频率