gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:24 25 4
gpt4 key购买 nike

我有两个类(class) Unit 和 Archer。 Archer 继承自 unit。我尝试使用构造函数链接来设置基类的统计信息,但如果我使用以下代码,统计信息似乎设置为零:

#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 的构造函数,我得到的是我使用的值。出于某种原因,我在 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){};
};

你的类的成员之前被初始化。说到这,你无缘无故地复制了相同的成员。只需将它们作为参数传递即可:

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){};
};

关于c++ - 构造函数链接不使用类成员的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53522141/

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