c++中二义性问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 13:19:37
#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++提供了方案来解析不同的名字,但是再怎么也算不过人非要让它产生二义性。建议如果你的方向不是做编译器的话,就避免思考此类问题。我只能说,如果现在这么去“算计”的话,将来会有更多精力花在这类问题了,不是很好。子类的默认虚函数参数无法被应用到基类指针的解引用调用上,无法通过指向类虚函数的指针加上域限定符来调用基类的函数(不通过指针就可以),什么时候用&什么时候不用&,也不是正交的。当然,如果涉及到模板,问题会更多。C语言为了效率而作出的很多规则,对正交性是不利的,可写性越强,可读性反倒越差。C++在这样的基础上,又为了效率和可写性,推出了太多的概念,使问题更复杂了。不要停留在这些细节上。

虚函数。。
说的问题很模糊啊。。