码迷,mamicode.com
首页 > 编程语言 > 详细

C++继承

时间:2015-07-04 11:04:59      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

首先,子类只能继承父类的public和protected成员。

公有继承:基类的公有成员和保护成员作为派生类的公有成员和保护成员。

私有继承:基类的公有成员和保护成员都作为派生类的私有成员。
保护继承:基类的公有成员和保护成员都作为派生类的保护成员。
*在子类中,父类的私有成员可以通过父类的public函数获得(只要这个父类的public函数在子类中没有被重写)
 
虚继承。(virtual只用于两个地方:一个是虚函数,另一个就是虚继承)
class A{
    char k[3];
public: 
    virtual void aa(){};
};
class B: public virtual A{
    char j[3];
public: 
    virtual void bb(){};
};
虚继承的关键字virtual高速编译器不事先绑定,在运行时才能进行定位访问。
编译器对每个包含虚函数的类创建一个表(vtable),设置一个指针(vfptr)指向它。所以A的大小为char k[3]对齐后的4字节+vfptr的4字节,为8
B虚继承了A,那么B中有一个虚类指针(vbptr_B_A)来指向其父类,然后还要包含父类的所有内容。所以B的大小是j[3]对齐后的4字节+指向B的vtable的虚指针vfptr的4字节+A的大小(8字节),为16。
虚继承运用于多重继承,如:B,C都继承A,D继承自B和C,那么普通继承就是:
A         A
 \       /
  B     C
   \   /
     D
在类D中A重复出现,浪费内存空间,运用虚拟继承后:
    A
   / \
  B   C
   \ /
    D

C++继承

标签:

原文地址:http://www.cnblogs.com/qionglouyuyu/p/4620262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!