2.2.6 类的继承(4)
虽然,多重继承使程序编写更具有灵活性,并且更能真实地反映现实生活,但由此带来的麻烦也不小。我们看例2-15所示的程序(EX07.CPP):
例2-15
- 1. #include <iostream.h>
- 2. class B1
- 3. {
- 4. public:
- 5. void output();
- 6. };
- 7. class B2
- 8. {
- 9. public:
- 10. void output();
- 11.};
- 12.void B1::output()
- 13.{
- 14. cout<<"call the class B1"<<endl;
- 15.}
- 16.void B2::output()
- 17.{
- 18. cout<<"call the class B2"<<endl;
- 19.}
- 20.
- 21.class A:public B1,public B2
- 22.{
- 23.public:
- 24. void show();
- 25.};
- 26.void A::show()
- 27.{
- 28. cout<<"call the class A"<<endl;
- 29.}
- 30.void main()
- 31.{
- 32. A a;
- a.output(); //该语句编译时会报错
- 33. a.show();
- 34.}
例2-15的程序乍一看,好像没有错误,但是,编译时就会出错。原因何在?由第21行代码我们知道派生类A是从基类B1和B2多重继承而来的,而基类B1和B2各有一个output()函数,在第33行,当类A的对象a要使用a.output()时,编译器无法确定用户需要的到底是哪一个基类的output()函数,而产生'A::output' is ambiguous的错误信息,请读者注意。