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

前端之家收集整理的这篇文章主要介绍了c – 为什么我必须从继承的类重新声明虚函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一个简单的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&C++相关文章