在继承的虚函数中调用子类的方法?
我是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.cpp
或Ah
,现在你要定义A::helper
在B.cpp
。
上一篇: Calling subclass' method in inherited virtual function?