Art*_*uro 4 c++ oop inheritance constructor constructor-chaining
我有两个班级单位和阿切尔.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;;
}
Run Code Online (Sandbox Code Playgroud)
输出为0.如果我使用值而不是使用成本(例如25)来调用Unit的construtor,我会得到我使用的值.由于某种原因,我在archer类中设置的基值根本没有被使用.
另外,我对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){};
};
Run Code Online (Sandbox Code Playgroud)
基础在您的班级成员之前初始化.说到这一点,你无缘无故地重复相同的成员.只需将这些作为参数传递:
class Archer: public Unit{
int stepSize = 25;
int returnedCoins = 0;
public:
Archer():Unit(25,100,50,
150){};
};
Run Code Online (Sandbox Code Playgroud)
如果你的目标是给这些值赋予有意义的名称,你可以使它们成为静态类常量:
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){};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |