从这段代码开始:
class Base{
public:
virtual void foo(){....}
};
class Derived{
public:
void foo(){....}
};
Run Code Online (Sandbox Code Playgroud)
如果d是一个Derived对象,我可以以某种方式调用该对象的Base类中定义的foo方法吗?
编辑:我的意思是从外面,这样d.foo()绑定到Base :: foo()
在呼叫中明确指定它.
#include <iostream>
class Base{
public:
virtual void foo(){
std::cout << "Base" << std::endl;
}
};
class Derived : public Base{
public:
void foo(){
std::cout << "Derived" << std::endl;
}
};
int main()
{
Derived d;
d.Base::foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
只是限定调用(假设Derived实际上继承自Base,在代码中它没有):
Derived d;
d.Base::foo();
Run Code Online (Sandbox Code Playgroud)
现在,尽管这是可行的,但它也是值得怀疑的.如果该方法是虚拟的,则意味着被覆盖并且用户不应该调用特定的覆盖,而是最终覆盖,否则它们可能会一直破坏类不变量.
考虑到实现Derived::foo需要一些额外的工作来保持一些不变量,如果用户调用Base::foo额外的工作将不会完成并且不变量被破坏,使对象处于无效状态.