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

时间:2015-03-05 04:03:46

标签: c++ inheritance

我是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

1 个答案:

答案 0 :(得分:0)

  

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

错误与虚拟功能无关。您不能从基类调用派生类方法。在基类中,在派生的简单中声明的方法不存在


此外,您假设虚函数与抽象函数相同是不正确的。 They're not the same

令人困惑的是,在Java中,all non-static methods are virtual by default。在C ++中,您必须在需要时明确声明它们virtual


此外,您应该在AA.cpp中定义 {/ 1}}的所有成员函数,此时您正在定义A.hA::helper