pre{
line-height:1;
color:#1e1e1e;
background-color:#d2d2d2;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#1e1e1e;}
.operator {color:#008000;font-weight:bold;}

派生类继承基类

      内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的

       然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基类同名变量,注意,覆盖不是删除,也 就是派生类中继承自基类的成员变量依然存在,而且值也不发生变化。如果想用此继承自基类的成员变量,则要加:: , 在成员函数中访问时,直接用base::i,即可,用派生类的对象a访问时,如果此继承自基类的成员变量是对象可访问的(Public类型),则用 a.base::i访问之

 

Base base;
Sub_class  sub;
base.i;
base.j

但是用对象访问派生类的继承自基类的成员变量时(假定public类型)

得用:

sub.Base::i
sub.Base::j

直接用sub.i, 访问的是子类自定义的i

如 以下程序

    class base{
    public:
          int i;
          int j;
    };
    class sub:public base{
     public:
             int i;
             int j;
        void p(){
                  cout<<base::i<<endl;
                  cout<<base::j<<endl;
                 }        
    };  
    base b;
    sub s;
    b.i=1;
    b.j=2;
    s.i=3;
    s.j=4;
    s.p();             //   输出两个不确定的数 4425598   4421322
    cout<<b.i<<endl;  //   1
    cout<<b.j<<endl;   //   2
    cout<<s.i<<endl;   //   3
    cout<<s.j<<endl;   //   4
    cout<<s.base::i<<endl;
    cout<<s.base::j<<endl;

输出结果如下

4425598

4421322

1

2

3

4

4425598

4421322

Press any key to continue . . .

从派生类对象继承的两个基类变量的值和及基类对象两个成员变量的值得比较看,足以验证上述结论:

子类继承的基类的成员,只是在另一个内存空间内开辟一个这种类型的成员变量,它的值并不是基类的值,编译器只是负责把这一部分空间类型设置为与基类的类型相同

本文使用 书画小说软件 发布,内容与软件无关,书画小说软件 更惬意的读、更舒心的写、更轻松的发布。

 

最新文章

  1. 开源服务专题之--------mysql的编译安装
  2. js 原生对象排序
  3. 可扩展验证框架 - A2DFramework验证框架使用介绍
  4. Python字典笔记
  5. perl DBI 学习总结(转载)
  6. [翻译]Json.NET API-Linq to Json Basic Operator(基本操作)【转】
  7. [Excel] C#ExportExcel帮助类 (转载)
  8. Angular基础知识
  9. JDBC公共动作类
  10. python包
  11. ex3多类问题和NN中的前向传播
  12. Tinc VPN
  13. OC在终端编写和运行
  14. 关于O(logN)的正确理解
  15. Java框架之Spring(四)
  16. 纯CSS炫酷的3D旋转
  17. HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
  18. TensorFlow基础
  19. Ajax进阶之原生js与跨域jsonp
  20. FGX Native library功能介绍

热门文章

  1. iOS:地图:MapKit和CoreLocation
  2. 【流媒体】 Android 实时视频编码—H.264硬编码
  3. 如何写计算机会议的rebuttal
  4. php面向对象的三大特征 封装,继承,多态
  5. pyhton类集成
  6. BZOJ 1452 Count(二维树状数组)
  7. HDU 3951 (博弈) Coin Game
  8. 51nod1295 XOR key
  9. 【第七篇】bootstrap的3级菜单样式,支持母版页保留打开状态
  10. myeclipes准备工作