我有两个类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){};
};