写法: class 子类:继承方式 父类1,继承方式 父类2 ......
eg:class A:public B,public C {};
容易产生的问题:
当一个子类的几个父类中有重名成员时,这时候再通过子类的对象调用时就不能正常运行,原因很简单,因为编译器不知道调用哪个基类的成员。
举个例子:一个子类的基类1中含有m_a,子类二中也含有m_a,那么我通过子类对象调用的时候该调用哪个呢?这就产生了我们常说的二义性
解决方法:加上作用域解决。
#include<iostream>
using namespace std;
class Base1 {
public:
Base1()
{
m_A = 100;
}
public:
int m_A;
};
class Base2 {
public:
Base2()
{
m_A = 200;
}
public:
int m_A;
};
//语法:class 子类:继承方式 父类1 ,继承方式 父类2
class Son : public Base2, public Base1
{
public:
Son()
{
m_C = 300;
m_D = 400;
}
public:
int m_C;
int m_D;
};
//多继承容易产生成员同名的情况
//通过使用类名作用域可以区分调用哪一个基类的成员
void test01()
{
Son s;
cout << "sizeof Son = " << sizeof(s) << endl;
cout << s.Base1::m_A << endl;
cout << s.Base2::m_A << endl;
//如果直接写s.m_A,就会报错,原因就是产生了二义性,只有加上作用域才行
}
int main() {
test01();
system("pause");
return 0;
}