C++继承

继承访问权限

父类public 父类protect 父类private
public继承 public protect ---
protect继承 protect protect ---
private继承 private private ---

先看继承的权限关键字,再看父类的成员变量声明关键字。

构造函数执行顺序

  • 调用父类构造方法
  • 调用组合类构造方法
  • 调用本身的构造方法

析构函数执行顺序

与构造函数执行顺序相反

继承中同名成员变量

class A中有x ;class B集成A,同时也有x。则b.x访问的是B中的x。如果要访问A中的x,则用b.A::x。

静态成员变量

  • 遵循集成规则
  • 使用前必须先定义

多继承产生的成员变量多义性

  • 多个继承类继承自同一个祖先类,祖先类中的成员变量使用会产生二义性。如下:


    C++继承_第1张图片
    1.png
#include 

using namespace std;

class A {
public:
    A() {
        cout << "A" << endl;
    }

    int x;
};

class B : public A {
public:
    B() {
        cout << "B" << endl;
    }
};

class B1 : public A {
public:
    B1() {
        cout << "B1" << endl;
    }
};

class C : public B, public B1 {
public:
    C() {
        cout << "C" << endl;
    }
};

int main() {
    cout << "A size=" << sizeof(A) << endl;
    cout << "B size=" << sizeof(B) << endl;
    C c;
    //    c.x;
    return 0;
}

测试一运行结果:发现A类的构造函数调用了两次。

A size=4
B size=4
A
B
A
B1
C

测试二,把//c.x的注释打开。运行报错,提示x不明确

error: request for member 'x' is ambiguous

解决办法,可以在集成B和B1的时候加上virtual关键字。

  • 多个继承类中有同名的成员变量


    C++继承_第2张图片
    2.png

你可能感兴趣的:(C++继承)