- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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 .
Virtual functions是可以被派生类覆盖的函数。
抽象函数,又名 pure virtual functions ,是需要由继承类实现的函数。
令人困惑的是,在 Java 中,all non-static methods are virtual by default .在 C++ 中,您必须在需要时显式声明它们 virtual
。
此外,您应该在A.cpp
或A.h
中定义A
的所有 成员函数,现在您正在 B.cpp
中定义 A::helper
。
关于c++ - 在继承的虚函数中调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28869789/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!