我完全知道,我要告诉你的语法是调用例如派生类中的基类方法。但是在我遇到的一些代码中,在类实现之外使用了相同的语法,我想知道这是否是合法的(在标准C++意义上)结构,以及结果行为是否已定义好?从非派生代码调用基本方法,这可能吗?法律?
class Base
{
public:
virtual void method(int arg)
{
...
}
};
class Derived : public Base
{
public:
virtual void method(int arg)
{
...
Base::method(arg); // I'm fully comfortable with this...
}
};
int main(int argc, char* argv[])
{
Derived d;
Derived* pD = &d;
pD->Base::method(2); // is this allowed?
...
是的,它是允许的。 – Meixner
每次你认为某件事情不应该是合法的,因为它是“错误的”,请记住,在大多数情况下,C++规则是“相信程序员”:如果程序员错了,程序员不会这样做。请记住,如果你真的生气了,你可以对对象实例“memset”:-D ...如果事情不可能不自觉地发生,就没有必要禁止它。 – 6502