问题:C++多重继承的简单案例

本程序通过VC++ 6.0编译与测试,其中A,B为C的父类,具体代码如下:

//多重继承造成的错误
#include <iostream>
using namespace std;
class A //父类A
{
private:
	int a;
public:
	A(int i):a(i){};
	void print()
	{
		cout<<a<<endl;
	}
};

class B  //父类B
{
private:
	int b;
public:
	B(int j):b(j){};
	void print()
	{
		cout<<b<<endl;
	}
};

class C:public A,public B  //子类C继承自A,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();  //get_ab只在子类C中声明,运行无误
	x.print();   //A,B父类中同时存在print,编辑即出现错误
	return 0;
}


编译器报错:

//对于多重继承的正确使用
#include <iostream>
using namespace std;
class A //父类A
{
private:
	int a;
public:
	A(int i):a(i){};
	void print()
	{
		cout<<a<<endl;
	}
};

class B  //父类B
{
private:
	int b;
public:
	B(int j):b(j){};
	void print()
	{
		cout<<b<<endl;
	}
};

class C:public A,public B  //子类C继承自A,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();  //get_ab只在子类C中声明,运行无误
	//x.print();   //A,B父类中同时存在print,编辑即出现错误
	//解决方法↓
	x.A::print();//添加作用域
	return 0;
}

程序运行结果: