我是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
。
答案 0 :(得分:0)
[...]编译器似乎并不喜欢我在超类中定义的虚方法中调用派生类中定义的
helper2
方法。它给出错误“错误:'helper2'未在此范围内声明”。
错误与虚拟功能无关。您不能从基类调用派生类方法。在基类中,在派生的简单中声明的方法不存在。
此外,您假设虚函数与抽象函数相同是不正确的。 They're not the same
Virtual functions是派生类可以 重写的功能。
抽象函数,又名pure virtual functions,是继承类需要 实现的函数。
令人困惑的是,在Java中,all non-static methods are virtual by default。在C ++中,您必须在需要时明确声明它们virtual
。
此外,您应该在A
或A.cpp
中定义 {/ 1}}的所有成员函数,此时您正在定义A.h
在A::helper
。