zoukankan      html  css  js  c++  java
  • c++继承

    继承
         (1).目的:为了代码的复用、允许在保持原有类特性的基础上进行扩展 、增加功能
         (2).继承关系&访问限定符:
              public、protected、private
         (3).派生类的六个成员函数
              构造函数、析构、拷贝构造、赋值运算符重载、取地址符操作符重载、const修饰的取地址操作符重载
    继承过程中构造函数调用顺序:基类构造函数——>派生类中对象构造函数——>派生类构造函数体
    class A
    {
    public:
         A()
              :a(1)
         {
              cout<<"A()"<<endl;
              cout<<a<<endl;
         }
         void fun()
         {
              cout<<"A-fun()"<<endl;
         }
         ~A()
         {
              cout<<"~A()"<<endl;
         }
    private:
         int a;
    };
    class B:public A
    {
    public:
         B()
         {
              cout<<"B()"<<endl;
         }
         void fun()
         {
              cout<<"B-fun1()"<<endl;
         }
         ~B()
         {
              cout<<"~B()"<<endl;
         }
    private:
         int b;
    };
    int main()
    {
         A a;
         B b;
         return 0;
    }

      (4).赋值兼容规则

              a.子类对象可以赋值给父类对象(切割/切片)
              b.父类对象不能赋值给子类对象
              c.父类的指针/引用可以指向子类对象
              d.子类的指针或者对象不能指向父类对象(可以强制类型转换)
         (5).单继承&多继承&菱形继承
              单继承:一个子类只有一个直接父类的继承关系
              多继承:一个子类有两个或以上的直接父类的继承关系
         菱形继承:存在二义性和数据冗余问题
    class A
    {
    public:
         int a;
    private:
         int a1;
    };
    class B:public A
    {
    public:
         int b;
    private:
         int b1;
    };
    class C:public A
    {
    public:
         int c;
    private:
         int c1;
    };
    class D:public B,public C
    {
    public:
         int d;
    private:
         int d1;
    };
    int main()
    {
         cout<<sizeof(A)<<endl;//8
         cout<<sizeof(B)<<endl;//16
         cout<<sizeof(C)<<endl;//16
         cout<<sizeof(D)<<endl;//40   将a a1保存了两份
         D d;
         d.a=3;                //产生对a访问的二义性  d.C::a  /   d.B::a
         return 0;
    }
    ***虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);

     用虚继承解决菱形继承的二义性和数据冗余问题

    安心下来做技术,笑是最大的福气
  • 相关阅读:
    HTTP2.0 原理详解
    Who do you want to be bad? (谁会是坏人?)人工智能机器小爱的问话
    有感于比尔盖茨:人工智能可以创造10倍于微软的价值
    人工智能:“我的心如同我的良梦,最多的是杀不完的人” —— 机器人小冰
    程序员之殇 —— (Are you afraid of me? Don't be.)灵感=神秘感
    程序员之殇 —— One program, One king (血月)
    程序员之殇 —— (The Beginning of the End)噩梦、崩坏
    WPF 从当前层次遍历查找 子控件及父控件
    c# 获取图像像素
    Thread类
  • 原文地址:https://www.cnblogs.com/JN-PDD/p/6639336.html
Copyright © 2011-2022 走看看