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 . . .

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

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

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

 

基类,派生类,内存分配情况 .xml的更多相关文章

  1. 《C++ Primer Plus》读书笔记之十—类和动态内存分配

    第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的 ...

  2. [Java]Java类和对象内存分配详解

    描述 代码说明: 一.当Person p1 = new Person();第一次被调用时需要做两件事: 1.先判断类加载器是否加载过Person类,如果没有则加载到Person类型到方法区 2.在堆中 ...

  3. C++ primer plus读书笔记——第12章 类和动态内存分配

    第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化 ...

  4. 简述 C、C++程序编译的内存分配情况【转】

    面试题 9:简述 C.C++程序编译的内存分配情况  C.C++中内存分配方式可以分为三种:  (1)从静态存储区域分配:  内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快. ...

  5. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  6. C++_类和动态内存分配3-构造函数中使用new的注意事项

    如果在构造函数中使用new来初始化对象的指针成员时必须特别小心. 1 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete. 2 new和delete必须相互兼容.new对应于 ...

  7. 《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记

    12.6.1 重载<<运算符要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:ostream & operator<&l ...

  8. C# 基类派生类构造函数执行顺序分析

    using System; namespace ConsoleApp1 { class Program{ static void Main(string[] args){ B b = new B(); ...

  9. C#A类派生类强转基类IL居然还是可以调用派生类中方法的例子

    大家都知道在C#中,如果B类继承自A类,如果一个对象是B类型的但是转换为A类型之后,这个对象是无法在调用属于B类型的方法的,如下例子: 基类A: public class A { } 派生类B: pu ...

随机推荐

  1. Oracle 全文索引相关命令

    --用sys用户登录,解锁ctxsys用户alter user ctxsys account unlock; --授权给对应用户grant execute on ctx_ddl to yw; --用y ...

  2. Android 使用Application类保存应用的全局数据

    在实际应用我们经常需要对数据进行交互与保存,但Intent中默认的方法对传输数据是有类型限制的,当我们需要传输或保存一个复杂的泛型数据时,使用Application是一个很好的解决办法. 顾名思义,A ...

  3. eclipse使用replace命令替换整个project/workspace的某个字符串

    比如说为了在调试的时候方便,我的应用程序中有很多System.out.println() 调试好了,要发布了,如何把这些一次性注释掉呢?见下图

  4. springboot源码解析 - 构建SpringApplication

    1 package com.microservice.framework; 2 3 import org.springframework.boot.SpringApplication; 4 impor ...

  5. 共有19款Java 文件上传组件开源软件

    http://www.oschina.net/project/tag/139/fileupload?lang=19&sort=view

  6. IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028

    查看导入日志,发现错误如下: oracle@sspt:/back/log> cat imp.HD_HDXX.log Connected to: Oracle Database 11g Enter ...

  7. 【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC

    2013-12-04 19:07:05 将在CCS中仿真的数据导入电脑上时,可以选择不同的数据类型,以便分析,具体方法如下: 在CCS菜单中,选择File—>Data—>Save,弹出以下 ...

  8. 批处理 —— 每天生成一个以日期命名的文件(Win XP)

    想达到这样一个效果:每天在某个目录下生成一个以日期命名的文件(如,0705.txt). 第一步,新建一个批处理文件 新建一个文件,比如[create_day_file.bat].编辑,输入以下内容 : ...

  9. linux 系统 tar 的用法详解

    [root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...

  10. [POJ1631]Bridging signals (DP,二分优化)

    题目链接:http://poj.org/problem?id=1631 就是求一个LIS,但是范围太大(n≤40000),无法用常规O(n²)的朴素DP算法,这时需要优化. 新加一个数组s[]来维护长 ...