gpt4 book ai didi

c++ - 如何覆盖子类中的抽象类构造函数

转载 作者:行者123 更新时间:2023-11-30 03:17:17 25 4
gpt4 key购买 nike

我刚刚从 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 类中的声明实际上定义(实现)构造函数,因为结尾是 {}

那么对于类,你需要做的就是

class AlienSpaceship: public Spaceship{
...
public:
AlienSpaceship(float, float, float, float, OrganismType);
};

在相关说明中,我建议您也使用初始化列表来初始化成员变量,那么您的构造函数就可以了

Spaceship::Spaceship(float health, float food, float cash, float misc)
: health(health), food(food), cash(cash), misc(misc)
{ /* Empty */ }

AlienSpaceship::AlienSpaceship(float health, float food, float cash, float misc, OrganismType race)
: Spaceship(health, food, cash, misc), race(race)
{ /* Empty */ }

当然这可以在类定义本身中内联完成:

class AlienSpaceship: public Spaceship{
...
public:
AlienSpaceship(float health, float food, float cash, float misc, OrganismType race)
: Spaceship(health, food, cash, misc), race(race)
{ /* Empty */ }
};

关于c++ - 如何覆盖子类中的抽象类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629505/

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