C++中关于二义性问题,,请帮忙分析下面的程序......

//下面两个函数是为了实现函数重载..
void f(int a)
{
cout<<"a"<<endl;
}
void f(int a,int b)
{
cout<<"a and b"<<endl;
}
//下面的类,C继承了A,B中的函数..
class A
{
public:
void f(int a)
{
cout<<"a"<<endl;
}
};
class B
{
public:
void f(int a,int b)
{
cout<<"a and b"<<endl;
}
};
class C:public A,public B
{
};
int _tmain(int argc, _TCHAR* argv[])
{
C c;
c.f(1); //或改为"c.f(1,2)"为什么都会产生二义性呢...
f(1);
f(1,2); //以上两个函数实现了重载..
system("pause");
return 0;
}
请帮忙分析下,类C继承A,B后的结构...为什么会有二义性呢...
类C在继承A,B后的效果不是和前面的两个函数一样吗??为什么这不是重载呢??

原因在于继承得到的成员函数没有构成派生类中的重载函数列表,
具有相同名称函数只在同一类域 或 全局域中构成重载
温馨提示:内容为网友见解,仅供参考
无其他回答

C++中关于二义性问题,,请帮忙分析下面的程序...
原因在于继承得到的成员函数没有构成派生类中的重载函数列表,具有相同名称函数只在同一类域 或 全局域中构成重载

【C++】常见二义性问题(更新中)
掌握这些常见二义性问题,你将更好地驾驭C++的复杂性,让代码更加清晰和可靠。在实践中不断学习和改进,你的编程之旅将更为顺畅。

c++二义性是什么?求例子说明、谢谢!
二义性指的是在编译期间对于某个函数调用有两个或两个以上的被重载的函数可与之对应的情况举个例子:include<iostream>using namespace std;void f(int a){ cout<<a<<endl;}void f(int& a){ cout<<a*a<<endl;}int main(){ int n; f(n); \/\/这里就有二义性问题,两个f函数都能...

c++二义性
C++中容易引起二义性的地方挺多的,像函数重载,多继承等。下面两个例子。多继承:class A { public:int a;void b(){} void f(){} void g(){} };class B { public:void f(){} void g(){} private:int a;void b(){} };class C: public A, public B { };int main() { C...

关于C++中的二义性
首先这个问题的关键与虚继承无关。此问题为继承情况下的隐藏(hide)问题,即派生类中的函数遮挡住基类中的同名函数,这并不是所谓的二义性,其实两个函数都存在,只是编译器发现当前作用域内的函数名时,就停止了 进一步向外层作用域搜索。想调用基类的函数,可以前边加上类名,如此例中d.C::a()或...

c++解决二义性的方法
B.初看题目,答案应该在BC之间.我就只解释错误的了.假设:基类中有方法void Cool(int i)派生类中也有方法void Cool(int i)实际运行中派生类的Cool方法会覆盖基类中的同名方法.因为基类的Cool方法并没有消失,仍然可以通过其他途径调用.所以,这样编写代码时很容易造成混淆(二义性)....

c++中的二义性是什么意思
二义性问题 在继承时,基类之间、或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生另一种不确定性——路径二义性。例子:一、同名二义性 基类B1和基类B2都存在一样的...

c++中二义性问题
明枪易躲,暗箭难防。C++提供了方案来解析不同的名字,但是再怎么也算不过人非要让它产生二义性。建议如果你的方向不是做编译器的话,就避免思考此类问题。我只能说,如果现在这么去“算计”的话,将来会有更多精力花在这类问题了,不是很好。子类的默认虚函数参数无法被应用到基类指针的解引用调用上...

C++ 涉及虚基类的二义性问题 C++ Primer Plus 中的话有点让我觉得前后...
二义性规则主要就是这句吧:如果在某个路径中 X 是虚基类的成员,而在另一路径中 X 是后代派生类的成员,也没有二义性——特定派生类实例的优先级高于共享虚基类实例。很明显,LZ摘得这第二句貌似是不对的,或者是在其他的语境中,或者是作者的笔误 自己敲了个小实验验证一下:include <iostream...

C++编程,如何解决成员函数的二义性
在Derived类中public中加入 void Show(){cout<<"sdf"<<endl;} 就可以实现对基类1,和基类2的同名函数的覆盖!完整代码如下:include <iostream.h> class Base1{ protected:int m;public:void Show(){cout<<m<<endl;} };class Base2{ protected:int n;public:void Show(){cout<<n<<endl;}...

相似回答
大家正在搜