构造函数链接不使用类成员的默认值



我有两个类Unit和Archer。弓箭手从单位继承。我试图使用构造函数链接来设置基类的统计数据,但如果我使用以下代码,统计数据似乎被设置为零:

#include<iostream>
using namespace std;
class Unit{
int damage = 0;
int curHp = 0;
int maxHp = 1;
int range = 0;
int cost = 0;
public:
Unit(int _damage,int _maxHp,int _range,
int _cost){
damage = _damage;
curHp = maxHp = _maxHp;
range = _range;
cost = _cost;
}
int getCost(){
return cost;
}
};
class Archer: public Unit{
int damage = 25;
int range = 50;
int maxHp = 100;
int cost = 150;
int stepSize = 25;
int returnedCoins = 0;
public:
Archer():Unit(damage,maxHp,range,
cost){};
};
int main()
{
Unit *curUnit =  new Archer();
cout<< curUnit->getCost()<<endl;;
}

输出是0。如果我用一个值而不是使用成本(比如25(调用Unit的构造器,我会得到我使用的值。出于某种原因,我在弓箭手职业中设定的基本值根本没有被使用。

此外,我是OOP的新手,所以我认为我可能做这件事的方式不对。如果有人能告诉我做这件事的正确方法,我会很高兴。

这是一个非启动

class Archer: public Unit{
int damage = 25;
int range = 50;
int maxHp = 100;
int cost = 150;
int stepSize = 25;
int returnedCoins = 0;
public:
Archer():Unit(damage,maxHp,range,
cost){};
};

在类的成员之前初始化基类。说到这里,你毫无理由地重复相同的成员。把这些作为论据:

class Archer: public Unit{
int stepSize = 25;
int returnedCoins = 0;
public:
Archer():Unit(25,100,50,
150){};
};

如果你的目标只是给这些值起一个有意义的名字,你可以让它们成为静态类常量:

class Archer: public Unit{
static constexpr int damage = 25;
static constexpr int range = 50;
static constexpr int maxHp = 100;
static constexpr int cost = 150;
int stepSize = 25;
int returnedCoins = 0;
public:
Archer():Unit(damage,maxHp,range,
cost){};
};

最新更新