基类,派生类,内存分配情况

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

     然后派生类自己定义的成员变量是排在继承的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

如 以下程序

01.class base{
02.public:
03.      int i;
04.      int j;
05.};
06.class sub:public base{
07. public:
08.         int i;
09.         int j;
10.    void p(){
11.              cout<<base::i<<endl;
12.              cout<<base::j<<endl;
13.             }        
14.
15.};  
16.base b;
17.sub s;
18.
19.b.i=1;
20.b.j=2;
21.
22.s.i=3;
23.s.j=4;
24.
25.s.p();             //   输出两个不确定的数 4425598   4421322
26.cout<<b.i<<endl;  //   1
27.cout<<b.j<<endl;   //   2
28.cout<<s.i<<endl;   //   3
29.cout<<s.j<<endl;   //   4
30.cout<<s.base::i<<endl;
31.cout<<s.base::j<<endl;


输出结果如下
4425598
4421322
1
2
3
4
4425598
4421322
Press any key to continue . . .

从派生类对象继承的两个基类变量的值和及基类对象两个成员变量的值得比较看,足以验证上述结论:
子类继承的基类的成员,只是在另一个内存空间内开辟一个这种类型的成员变量,它的值并不是基类的值,编译器只是负责把这一部分空间类型设置为与基类的类型相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值