当子类继承于多个父类时,有以下两种情况存在,称之为多重继承
// Multi_Inherit.cpp : Defines the entry point for the console application.
//多重继承
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;
//父类中同名函数如何区分
class A {//父类A
private:
int a;
public:
A(int i):a(i){}
void print()
{
cout << "父类A: " << a << endl;
}
};
class B//父类B
{
private:
int b;
public:
B(int j):b(j){}
void print()
{
cout << "父类B: " << b << endl;
}
};
class C :public A, public B
{
private:
int c;
public:
C(int i,int j,int k):A(i),B(j),c(k){}
void get_ab()
{
A::print();
B::print();
}
};
int main()
{
C x(5, 8, 10);
x.get_ab();
//子类C中既有父类A中的print()函数,又有父类B的print()函数,所以调用时不知道
//调用哪个父类的print()函数
//x.print(); //error C2385: ambiguous access of 'print'
system("pause");
return 0;
}
通过明确指明作用域解析符号进行区分
x.A::print();//指明调用A的print()函数
对于上面右边的图中我们称之为菱形继承
//菱形继承
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;
class R//祖先类
{
private:
int r;
public:
R(int anInt):r(anInt){}
void printOn()const
{
cout << "r = " << r << endl;
}
};
//父类
class A :public R
{
private:
int a;//父类A会有一份r
public:
A(int i,int j):R(i),a(j){}
};
//父类
class B :public R
{
private:
int b;//父类B会有一份r
public:
B(int i, int j) :R(i), b(j) {}
};
//子类
class C :public A, public B
{
private:
int c;//子类C会有两份r,一份来自A,一份来自B
public:
C(int i,int j,int k):A(i,j),B(i,j),c(k){}
};
int main()
{
R rr(10);
A aa(20, 30);
B bb(40, 50);
C cc(5, 7, 9);
rr.printOn();
aa.printOn();
bb.printOn();
//cc.printOn(); ///error C2385: ambiguous access of 'printOn'
system("pause");
return 0;
}