在面向对象编程领域一个关键的概念是继承。

  在OO和C++中,类成员共有三种级别的继承:public,protected和private。对于基类成员的存取操作应该依赖于下面两个因素:

  ·派生类声明其类头(public, protected 或 private)的方式

  ·对类成员的存取指定标志(public, protected 或 private)

  如果你在基类中声明成员为private,那么这些成员对于任何派生类都是不可存取的。

  如果你在基类中声明成员为protected,而且新类是基类的私有派生,那么这些成员在派生类中变为私有的。

  如果你在基类中声明成员为protected,而且新类是基类的protected 型派生,那么这些成员在派生类中变为protected 的。

  如果你在基类中声明成员为protected,而且新类是基类的public 型派生,那么这些成员在派生类中变为protected的。

  如果你在基类中声明成员为public,而且新类是基类的private 型派生,那么这些成员在派生类中变为private 的。

  如果你在基类中声明成员为public,而且新类是基类的protected 型派生,那么这些成员在派生类中变为protected的。

  如果你在基类中声明成员为public,而且新类是基类的public 型派生,那么这些成员在派生类中变为public 的。

  这是一些老式的C++规则。在.Net中,情况就大大不同了-.Net仅支持public继承。但是当一个类被public继承,则基类的保护成员将对新的派生类成为private的。

  考虑下面的三个C++类:

class A
{
 protected: void fa()
 { printf("fa called"); }
};
class B : public A
{
 public: void fb()
 { fa(); }
};
class C : public B
{
 public: void fc()
 { fa(); }
};
int main()
{
 C c;
 c.fc();
 return 0;
}

  根据我前面介绍的规则,在C++中这些代码是能成功运行的。但是如果你把它们改变为托管类,则在类c中是不能调用fa()的。

C++/CLI思辨录之再谈继承相关推荐

  1. C++/CLI思辨录之代理构造函数

    现在我们讨论一下新的C++/CLI环境下的一个很酷的特性,称作代理构造函数. 对一个类来说,有多个构造函数是经常的事:并且这多个构造函数有一段共同的代码也很经常.一般地,在这种情况下,我们都是为该共同 ...

  2. C++/CLI思辨录之内部指针的两面性

    在本文中,我将解释为什么使用本地指针来管理对象.原因在于对象是以垃圾收集器移动的.所以,当对象移动时,本地指针就变成无效的.所以,如果你想取得一个托管对象的本地指针,你就会遇到一个编译错.下面的代码显 ...

  3. C++/CLI思辨录之传递托管堆地址

    新的C++特点平衡了把托管堆的地址传递到非托管代码的能力.早期我们遇到的最大问题是,在托管堆中的对象的位置是非静态的.垃圾收集器以变化的时间间隔移动对象.现在新的pin_ptr(别针型指针)的引入禁止 ...

  4. C++/CLI思辨录之Object的对象布局

    C++/CLI相对纯C++来说,支持创建托管引用对象,托管对象由虚拟机来分配内存和管理,程序员可以不再担心内存泄漏的问题.其实,说白了也就是相当于自己创建一个内存池,并且虚拟机实际上也是这样做的. 在 ...

  5. 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...

    在一个基于面向服务的分布式环境中,借助一个标准的.平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互.这个交互的过程实 ...

  6. python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  7. 再谈 BigInteger - 使用快速傅里叶变换

    我在"浅谈 BigInteger"的随笔中实现了一个 Skyiv.Numeric.BigInteger 类,那时乘法是使用常规的 O(N2) 的算法,所以比 .NET Framew ...

  8. 再谈编程范式-程序语言背后的思想

    link link 编程范式 托马斯.库尔提出"科学的革命"的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词.编程范式一般包括三个方面,以OOP ...

  9. 再谈多态——向上映射及VMT/DMT(转)

    在<浅谈多态--概念描述>一文中,提到多态的本质就是"将子类类型的指针赋值给父类类型的指 针".那么,为什麽这种赋值是允许的,或者说是安全的呢?反过来行不行?虚函数的动 ...

最新文章

  1. Windows 终端神器 MobaXterm,免费版可以在公司环境下使用
  2. Fetch API 初步解读
  3. 【解决方案】VMWare拖动窗口后有黑色边框(分辨率自适应问题)
  4. 【转】HashMap和HashSet的区别
  5. c++ enum 枚举类型
  6. android studio下NDK开发
  7. CSS Sprite “精灵图“
  8. jQuery心得5--jQuery深入了解串讲1
  9. stm32l0的停止模式怎么唤醒_手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖...
  10. Codeforces Round #FF
  11. 用C#委托实现哨兵和敌人的观察者模式!
  12. 计算机内部信号表现形式,2021山西特岗教师招聘考试:信息技术学科基础考点归纳六...
  13. Ansible8:Playbook循环
  14. Linux 命令(15)—— umask 命令(builtin)
  15. CADisplaylink初解
  16. 主机动手系列 — 不同CPU,不同命令,怎么管理HP-UX服务器
  17. 电脑文件一键实时备份同步至云端(百度云盘)
  18. web——html个人简历
  19. 整人的python代码_vbe最新整人代码
  20. 华南金牌x79支持服务器内存吗,迟来的评测:华南 金牌X79 主板,值不值得买?...

热门文章

  1. linux终端 中国象棋,在Deepin系统下安装Xboard并使用它玩中国象棋
  2. html真实雾效果图,HTML5 Canvas图片上云雾弥漫驱散特效
  3. spark集群访问mysql_spark连接数据源以及在spark集群上跑
  4. win10 mysql 远程访问_win10 docker部署mysql并启动远程连接
  5. 无法启动此程序,因为计算机中丢失iathook.dll,通过IAT+Hook调试Windows自定义未处理异常过滤器.pdf...
  6. SpringSecurityFilterChain
  7. Flink 生成数据源
  8. D3 svg text标签控制
  9. requests与bs4编码
  10. Linux tmux