C++中的继承与多继承

一个类有多个直接基类被称为是多继承

public的继承方式

基类中所有public成员在派生类中为public属性

基类中所有protected成员在派生类中为protected属性

基类中所有private成员在派生类及其他类中不能访问

protected的继承方式

基类中所有public成员在派生类中为protected属性

基类中所有protected成员在派生类中为protected属性

基类中所有private成员在派生类及其他类中不能访问

private的继承方式

基类中所有public成员在派生类中为private属性

基类中所有protected成员在派生类中为private属性

基类中所有private成员在派生类及其他类中不能访问

#include<iostream>
using namespace std;
class A
{
private:int m_a;
protected:int m_b;
public:int m_c;
public:void print1(){cout << m_a << endl;cout << m_b << endl;cout << m_c << endl;}
};
class B : public A
{
//public://int m_c;
//protected://int m_b;   //继承来的。
public:void print2(){cout << m_c << endl;cout << m_b << endl;}
};
class C : protected A
{
//protected://int m_c;
//protected://int m_b;
public:void print3(){cout << m_c << endl;cout << m_b << endl;}
};
class D : private A
{
//private://int m_b;
//private://int m_c;
public:void print4(){cout << m_c << endl;cout << m_b << endl;}
};
int main()
{A a;//a.m_a;    //a 为私有成员,只有本身类可以访问,不能被其他类或派生类访问。//a.m_b;    //b 为受保护成员,只能被基类和派生类访问,不能被其他类访问。a.m_c;B b;//b.m_a;//b.m_b;b.m_c;C c;//c.m_a;//c.m_b;//c.m_c;return 0;
}

多继承中构造顺序与继承顺序有关,与初始化列表无关。

#include<iostream>
using namespace std;
class A
{
//private:
public:int m_a;int x;A(int a);~A();
};
A::A(int a)
{cout << "AAAAAAAAAAA" << endl;m_a=a;
}
A::~A()
{cout << "aaaaaaaaaaa" << endl;
}
class B
{
//private:
public:int m_b;int x;B(int b);~B();
};
B::B(int b)
{cout << "BBBBBBBBBBBB" << endl;m_b=b;
}
B::~B()
{cout << "bbbbbbbbbbbb" << endl;
}
class C : public B, public A    //构造顺序与继承顺序有关
{
//private:
public:int m_c;C(int c);~C();
};
C::C(int c):B(1),A(1)          //多继承,继承顺序与初始化列表无关
{cout << "CCCCCCCCCCC" << endl;m_c=c;
}
C::~C()
{cout << "ccccccccccc" << endl;
}
int main()
{C c(1);cout << sizeof(c) << endl;cout << &c << endl;cout << &c.m_b << endl;cout << &c.B::x << endl;cout << &c.m_a << endl;cout << &c.A::x << endl;cout << &c.m_c << endl;return 0;
}