一个类有多个直接基类被称为是多继承
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;
}