gpt4 book ai didi

c++ - 为什么我必须重新声明继承类的虚函数?

转载 作者:可可西里 更新时间:2023-11-01 16:35:24 26 4
gpt4 key购买 nike

我正在处理一个简单的 C++ 程序,但很难理解我遇到的编译器错误。这个问题是由于我试图从基类创建派生类引起的。我在下面发布了具有相同结构但更改了名称的代码。

BaseClass.h

#ifndef BASECLASS_H
#define BASECLASS_H

class BaseClass {

public:
BaseClass(void);

virtual int method1(void) = 0;
virtual int method2(void) = 0;
virtual float method3(void) = 0;

};

#endif // BASECLASS_H

DerivedClass.h

#ifndef DERIVEDCLASS_H
#define DERIVEDCLASS_H

#include "DerivedClass.h"

class DerivedClass: public BaseClass
{

public:
DerivedClass(void);
};

#endif // DERIVEDCLASS_H

DerivedClass.cpp

#include "DerivedClass.h"

DerivedClass::DerivedClass(void)
{
}

int DerivedClass::method1(void)
{
// TODO
}

int DerivedClass::method2(void)
{
// TODO
}

float DerivedClass::method3(void)
{
// TODO
}

尝试编译时,所有虚拟方法都出现以下错误:

no 'int DerivedClass::methodX()' member function declared in class 'DerivedClass'

只要我在“DerivedClass.h”中声明这些方法,错误就会消失,因为编译器现在知道这些方法。

但是,我很困惑。为什么需要在 DerivedClass.h 中重新声明纯虚函数?当我#include DerivedClass.h 时,它会自动包含 BaseClass.h,因此我假设我的 DerivedClass.cpp 应该完全了解这些方法。我做错了什么吗?

最佳答案

这样不行。您需要声明要定义的方法,无论它们是否重写虚方法。

这不仅仅是语言的不合理要求。如果没有这个,您将无法定义部分虚拟类,即,您可以拥有 BaseSubtype,它具有 method1() 的通用实现,但需要从它派生的类来实现 method2()method3()

关于c++ - 为什么我必须重新声明继承类的虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118963/

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