下面程序代码,在执行时,会产生二义性错误,分析为什么会产生二义性,如何修改程序来解决二义性问题?
分析运行程序,分析错误产生原因。并将错误代码用后面注释来修改替换,运行分析程序。
#include<iostream>
#include<string>
using namespace std;
class Base {
protected:
int a;
public:
Base( )
{ a=5;}
void base_print()
{ cout<<"Base a="<<a<<endl;}
};
class B1:public Base{
public:
B1( )
{ a=a+10;}
void derive_print1()
{cout<<"derive one a="<<a<<endl;}
};
class B2:public Base{
public:
B2( )
{ a=a+20;}
void derive_print2()
{cout<<"derive two a="<<a<<endl;}
};
class D:public B1,public B2{
public:
D( ){a+=30;} // {B2::a+=30;}
void print()
{ cout<<"a="<<a<<endl; //cout<<"from B1 a="<<B1::a<<endl; //cout<<"B2 a="<<B2::a<<endl;
}
};
int main( )
{ D obj;
obj.B1::base_print(); //obj.B1::base_print();
obj.B2::base_print();
obj.derive_print1();
obj.derive_print2();
obj.print();
system("pause");
return 0;
}
分析运行程序,分析错误产生原因。并将错误代码用后面注释来修改替换,运行分析程序。