多继承产生的问题
#include <iostream>
using namespace std;
// 多继承产生的问题:如果一个继承的多继承有同一个父类,
// 则父类的构造函数会被调用两次
//////////////////////////////////////////////////////////////////////////
// 多继承,多基类混乱的问题
// 以下代码的结果
/*
总类 A 构造函数被调用。。。
类 A1 构造函数被调用。。。
总类 A 构造函数被调用。。。
类 A1 构造函数被调用。。。
类 F 构造函数被调用。。。
*/
class A
{
public:
A()
{
cout << "总类 A 构造函数被调用。。。" << endl;
}
};
class A1 :public A
{
public:
A1()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class A2 :public A
{
public:
A2()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class F :public A1, public A2
{
public:
F()
{
cout << "类 F 构造函数被调用。。。" << endl;
}
};
int main1()
{
F f;
return 0;
}
#
#include <iostream>
using namespace std;
// 多继承产生的问题:如果一个继承的多继承有同一个父类,
// 则父类的构造函数会被调用两次
//////////////////////////////////////////////////////////////////////////
// 多继承,多基类混乱的问题
// 以下代码的结果
/*
总类 A 构造函数被调用。。。
类 A1 构造函数被调用。。。
总类 A 构造函数被调用。。。
类 A1 构造函数被调用。。。
类 F 构造函数被调用。。。
*/
class A
{
public:
A()
{
cout << "总类 A 构造函数被调用。。。" << endl;
}
};
class A1 :public A
{
public:
A1()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class A2 :public A
{
public:
A2()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class F :public A1, public A2
{
public:
F()
{
cout << "类 F 构造函数被调用。。。" << endl;
}
};
int main1()
{
F f;
return 0;
}
#虚继承解决多继承产生的问题
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
// 使总基类虚继承,可避免因为多继承,多基类混乱的问题
// 以下代码的结果
/*
总类 A 构造函数被调用。。。
类 A1 构造函数被调用。。。
类 A1 构造函数被调用。。。
类 F 构造函数被调用。。。
请按任意键继续. . .
*/
class AA
{
public:
AA()
{
cout << "总类 A 构造函数被调用。。。" << endl;
}
};
class AA1 : virtual public AA
{
public:
AA1()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class AA2 :virtual public AA
{
public:
AA2()
{
cout << "类 A1 构造函数被调用。。。" << endl;
}
};
class FF :public AA1, public AA2
{
public:
FF()
{
cout << "类 F 构造函数被调用。。。" << endl;
}
};
int main()
{
FF f;
return 0;
}
时间: 2024-10-09 06:57:49