使用基类虚方法

Asl*_*986 1 c++

从这段代码开始:

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()

pmr*_*pmr 6

在呼叫中明确指定它.

#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)


Dav*_*eas 6

只是限定调用(假设Derived实际上继承自Base,在代码中它没有):

Derived d;
d.Base::foo();
Run Code Online (Sandbox Code Playgroud)

现在,尽管这是可行的,但它也是值得怀疑的.如果该方法是虚拟的,则意味着被覆盖并且用户不应该调用特定的覆盖,而是最终覆盖,否则它们可能会一直破坏类不变量.

考虑到实现Derived::foo需要一些额外的工作来保持一些不变量,如果用户调用Base::foo额外的工作将不会完成并且不变量被破坏,使对象处于无效状态.