在继承的虚函数中调用子类的方法?

我是C ++的新手,但我的印象是,C ++中的虚拟内容与Java中的抽象内容相当。 我有以下几点:

//A.h
class A {
public:
    void method();
protected:
    virtual void helper();
}

用下面的cpp:

//A.cpp
#include "A.h"
void A::methodA() {
    //do stuff
    helper();
}

那么这里是派生类:

//B.h
#include "A.h"
class B: public A{
private:
    void helper2();
}

和以下派生的cpp:

//B.cpp
#include "B.h"

void B::helper2() {
    //do some stuff
} 

void A::helper() {
    helper2();
}

然而,编译器似乎并不喜欢我在调用派生类中定义的helper2方法,在超类定义的虚方法中。 它给出错误“错误:'helper2'未在此范围内声明”。 这不是我应该如何使用虚拟方法?

顺便说一句,我不能使用关键字override


[...]编译器似乎不喜欢我在调用派生类中定义的helper2方法,在超类定义的虚方法中。 它给出错误“错误:'helper2'未在此范围内声明”。

该错误与虚拟功能无关。 您不能从基类调用派生类方法。 在派生中声明的方法根本不存在于基类中。


此外,假设虚拟函数与抽象函数相同是不正确的。 他们不一样。

  • 虚函数是可以被派生类覆盖的函数。

  • 抽象函数又称纯虚函数,是需要由继承类实现的函数。

  • 令人困惑的是,在Java中, 所有非静态方法默认都是虚拟的。 在C ++中,您必须在需要时明确声明它们是virtual


    此外,你应该定义的所有成员函数A在任何A.cppAh ,现在你要定义A::helperB.cpp

    链接地址: http://www.djcxy.com/p/38133.html

    上一篇: Calling subclass' method in inherited virtual function?

    下一篇: Confused with override and new functionality C#