gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:01 31 4
gpt4 key购买 nike

我是 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();
}

但是,编译器似乎不喜欢我在父类(super class)中定义的虚拟方法中调用派生类中定义的 helper2 方法。它给出错误“错误:‘helper2’未在此范围内声明”。这不是我应该如何使用虚拟方法吗?

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

最佳答案

[...] the compiler does not seem to like that I am calling the helper2 method defined in the derived class, within a virtual method defined in the super class. It gives the error "error: ‘helper2’ was not declared in this scope".

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


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

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


此外,您应该在A.cppA.h 中定义A所有 成员函数,现在您正在 B.cpp 中定义 A::helper

关于c++ - 在继承的虚函数中调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28869789/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com