关于C++继承(多重继承)

1. 在多重继承中,如果一个类同时继承两个类 class A和class B, 而class A和B 中都有一个叫 foo() 的函数,如何明确地在子类中指出override哪个父类的foo() ?
需要明确的指明 父类 的名字,如: C.A::foo(), C.B::foo().

2.在多重继承中, 比如三级, 同时又存在虚函数, 那么会有 "覆盖" 发生, 并且其原则是: 如果父辈存在相关接口则优先调用父辈接口,如果父辈也不存在相关接口,则调用祖父辈接口.

3. C++类在继承的时候,默认的是私有继承,私有继承是无法继承并使用父类函数中的公用变量的. 因此, 在需要的时候,一定要加上public 关键字: class Derive: Base -> class Derive: public Base.
(由于私有继承和保护继承 使得派生对象的子类对象 访问基类的时候,限制重重, 有些人认为, 他们仅仅是在技术讨论上才有其一席之地)

4. 当基类的构造函数含有参数的时候, 若子类继承他,则需要显式的调用 基类的构造函数以完成初始化. 例如:
class base
{
        protected : int i;
        public: base(int x){i = x;}
};

class derived : public base
{
        private : int i;
        public: derived(int x,int y):base(x) //必须能保证base类型可以顺利的构造,否则会报错!
        {i = y;}

        void printTotal()
        {
                 int total = i + base::i;
                 cout << total <<endl;
         }
};

5.在计算继承类所占的字节数的时候,有如下规则:
(1), 如果类中有虚函数(有一个或多个的情况是一样的), 那么该类除了成员占用字节数外,还要多加 4 (虚函数指针)
(2) 如果基类有虚函数, 继承类 在 非虚拟继承的时候, 继承类的大小是基类大小(包括虚函数指针), 加上 本身数据成员的大小. 而 继承类本身的虚 函数指针大小不再重复记入.
(3)如果继承类是 虚拟继承, 那么在前面计算的基础上, 每一级的继承类都要多加四个字节(是虚类指针大小)!
例子:
class A{
        public:
                char k[3];
                virtual void aa() {};
                virtual void aaa() {};

}; // 大小为 8字节

class B:public virtual A{
        public:
                char bk[3];
                int a;
                virtual void bb() {};
};// B的大小为 8(A的大小) + 8(成员变量字节数) + 4 (虚类指针大小)

class C:public B{
        public:
                char ik[3];
                virtual void cc() {};
};// C的大小为 20(B的大小) + 4(成员变量字节数)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值