C++:如何从外部调用父类函数

nah*_*hpr 9 c++ virtual inheritance pointers

我有:

class A{
    public:
        virtual void foo();
};

class B : public A{
    public:
        void foo();
};

B *ptr = new B();
Run Code Online (Sandbox Code Playgroud)

我想foo()使用'ptr'指针直接调用A.

当我尝试

(A*)ptr->foo();
Run Code Online (Sandbox Code Playgroud)

它仍然称为B的版本foo().我如何调用A的版本?

这可能吗?有哪些替代方案?谢谢.

asc*_*ler 19

当您使用::范围解析表单命名函数时,可以调用命名函数,就好像它不是虚拟的一样.

ptr->A::foo();
Run Code Online (Sandbox Code Playgroud)

  • +1.这是正确的,但如果你也谈论OP代码中的可访问性问题会更好. (3认同)
  • @Nawaz:如果还提到了破坏所有OO原则的事实,那就更好了:)`B`的用户不应该关心调用什么版本的`foo`,这是多态的主要观点. (3认同)