#include <iostream.h>
class A
{
protected:
void f() { cout<<"a f"<<endl; }
};
class B : public A
{
public:
A::f;
void f() { cout<<"b f"<<endl; }
};
class C : public B
{
public:
void f() { cout<<"c f"<<endl; }
};
void main()
{
C c;
c.B::f();
}
请问,怎样调用B类中的另一个f函数?
不用以下方法:
void g() { A::f(); }
c++中二义性问题
答案:3 悬赏:70 手机版
解决时间 2021-02-26 07:01
- 提问者网友:呐年旧曙光
- 2021-02-25 18:09
最佳答案
- 五星知识达人网友:野味小生
- 2021-02-25 19:11
明枪易躲,暗箭难防。C++提供了方案来解析不同的名字,但是再怎么也算不过人非要让它产生二义性。建议如果你的方向不是做编译器的话,就避免思考此类问题。我只能说,如果现在这么去“算计”的话,将来会有更多精力花在这类问题了,不是很好。子类的默认虚函数参数无法被应用到基类指针的解引用调用上,无法通过指向类虚函数的指针加上域限定符来调用基类的函数(不通过指针就可以),什么时候用&什么时候不用&,也不是正交的。当然,如果涉及到模板,问题会更多。C语言为了效率而作出的很多规则,对正交性是不利的,可写性越强,可读性反倒越差。C++在这样的基础上,又为了效率和可写性,推出了太多的概念,使问题更复杂了。不要停留在这些细节上。
全部回答
- 1楼网友:神鬼未生
- 2021-02-25 20:49
虚函数。。
说的问题很模糊啊。。
- 2楼网友:鸠书
- 2021-02-25 19:51
b. 初看题目,答案应该在bc之间. 我就只解释错误的了. 假设: 基类中有方法void cool(int i) 派生类中也有方法void cool(int i) 实际运行中派生类的cool方法会覆盖基类中的同名方法. 因为基类的cool方法并没有消失,仍然可以通过其他途径调用. 所以,这样编写代码时很容易造成混淆(二义性).
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯