我有两个单位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,如果我用一个值而不是使用cost(例如25)来调用Unit的构造函数,则会得到我使用的值。由于某些原因,我在archer类中设置的基值根本没有使用。
此外,我对OOP还是陌生的,所以我认为我这样做的方式可能是错误的。如果有人可以向我展示正确的方法,我会感到很高兴。
答案 0 :(得分:7)
这不是入门级
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){};
};