[英]Virtual function declaration and inheritance in C++
我有一个程序试图从基本抽象类创建派生类。 我的.h文件在这里。
#ifndef SHIP_H
#define SHIP_H
class Ship
{
public:
virtual ~Ship(void) {}
virtual const char *name(void) const = 0;
virtual int size(void) const = 0;
int getX(int i) const;
int getY(int i) const;
void print(void) const;
bool includes(int x, int y);
int level(void) const;
void decreaseLevel(void);
static Ship *makeShip(char ch, int x1, int y1, int x2, int y2);
protected:
void setPos(int a1, int b1, int a2, int b2);
int lev;
private:
bool checkConfig(int x1, int y1, int x2, int y2);
int x1,y1,x2,y2;
};
class AircraftCarrier : public Ship
{
public:
AircraftCarrier(int x1, int y1, int x2, int y2);
virtual const char *name(void) const;
virtual int size(void) const;
};
在Ship.cpp文件中,我有:
const char *name (void) {
const char * ret = "AircraftCarrier";
return ret;
}
但是,这在我的派生类AircraftCarrier的特定范围内未声明。 但是,每当我添加
const char AircraftCarrier :: *name {...}
我收到一个错误:
Ship.cpp:46:9:错误:无法将'const char *'转换为'const char AircraftCarrier :: *'返回return ret;
您要在Ship.cpp中声明的函数的名称为AircraftCarrier :: name(),并且该函数应根据头文件中的声明返回const char *。
const char *AircraftCarrier::name() {...}
这个定义:
const char *AircraftCarrier::name() {...}
是不正确的。 尝试使用它,您将得到“找不到成员”的编译错误。 您的声明和定义必须具有相同的原型。 因此,如果您写的是:
virtual const char *name(void) const;
^^^^^ ^^^^^
.h中的声明,那么您在.cpp中的定义必须与原型中的声明完全匹配。 正确的定义是:
const char* AircraftCarrier::name() const
{
// your complex code here
}
它应该是:
const char* AircraftCarrier :: name {...}
*
是返回类型规范的一部分,而不是函数名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.