【发布时间】:2019-04-11 09:46:41
【问题描述】:
我刚刚从 java 迁移到 c++,我真的在为曾经的基本概念而苦苦挣扎。我要做的就是创建一个名为“Spaceship”的抽象类,给它一个带有 4 个参数的构造函数,然后在一个名为“Alienspaceship”的子类中,我想创建一个带有 5 个参数但继承“spaceship”的构造函数' 构造函数的前 4 个参数。我一直在寻找所有地方,似乎无法找到我正在寻找的东西。下面是我的代码。请感谢任何可以帮助我的人!
标题
#ifndef SPACESHIP
#define SPACESHIP
#include "Enum.h"
class Spaceship{
public:
float health;
float food;
float cash;
float misc;
public:
Spaceship(float, float, float, float);
};
class AlienSpaceship: public Spaceship{
OrganismType race;
public:
AlienSpaceship(float, float, float, float, OrganismType):Spaceship(float, float, float, float){}
};
#endif
cpp
#include "Spaceship.h"
Spaceship::Spaceship(float health, float food, float cash, float misc){
this->health = health;
this->food = food;
this->cash = cash;
this->misc = misc;
}
AlienSpaceship::AlienSpaceship(float health, float food, float cash, float misc, OrganismType race):Spaceship(health, food, cash, misc){
this->race = race;
}
【问题讨论】:
-
AlienSpaceship(float, float, float, float, OrganismType):Spaceship(float, float, float, float){}是一个定义!它与您的 cpp 文件中的类外定义冲突。我怀疑您在重构时犯了印刷错误。忘记更新你移动的东西了。 -
离题:注意数据成员可以(应该?)在构造函数的主体之前初始化,你不需要这个->。因此: Spaceship::Spaceship(float health, float food, float cash, float misc): health(health), flood(flood), cash(cash), misc(misc) {}
-
顺便说一句,您的
Spaceship类不是抽象的。这是一个具体的类。至少使用您向我们展示的代码。 -
@Someprogrammerdude 是不是因为它不包含虚函数?
-
一个抽象类的虚函数被“初始化”为零(例如
virtual void abstract_function() = 0;)。纯抽象类只有个抽象函数(所以甚至没有构造函数或析构函数)。
标签: c++ inheritance constructor abstract