访问子类参数

问题描述 投票:0回答:1

我最近在我的Character类中添加了一个子类Enemy,该子类在其构造函数中还包含两个参数。

Enemy::Enemy(string name, int health, int stamina, bool isEnemy, bool roaming) : Character(name, health, stamina) {
    this->name = name;
    this->health = health;
    this->stamina = stamina;
    this->isEnemy = isEnemy;
    this->roaming = roaming;
}

我的角色班级也有针对健康体力和当前房间的吸气剂和吸气剂。我想知道子类在类中是否还需要这些方法?因为在我的主机中,当尝试呼叫敌人(敌人位于敌人类型的向量中)当前房间时,它无法访问内存地址,并且输出也不会显示其运行状况或耐力。

for(int i = 0; i < enemies.size(); i++) {
            if(currentRoom == enemies[i]->getCurrentRoom()) {
                cout << enemies[i]->getName() << " HP: " << enemies[i]->getHealth() << " " << enemies[i]->getName()
                     << " ST: " << enemies[i]->getStamina() << endl;
            }
c++ inheritance subclass
1个回答
0
投票

[如果在Character类中声明的“ getters”和“ setters”是公共的而不是纯虚拟的,并且Enemy类公开地从Character继承,就像这样:

class Enemy : public Character

敌人类不需要(也不应有)名称,健康和体力变量的“ getters”和“ setters”。检查这些条件是否正确。

[另外,查看您的Enemy类构造函数的实现,假设Character构造函数已经设置了名称,运行状况和耐力,则无需在Enemy构造函数的主体中再次进行设置(假设您没有其他三个变量在名为“名称,健康和耐力”的敌人类别中声明,如果您这样做,则是设计缺陷)。

另一件事,您正在通过Enemy构造函数按名称传递名称变量。为防止不必要的复制并因此产生更有效的代码,请根据常量构造函数是否也按值传递名称变量,通过常量引用将其传递,或将其std::move传递给Character构造函数。对于健康和耐力变量,这不是必需的,因为它们很容易复制构造和移动构造。

总而言之,如果您的Character构造函数是这样声明的:

Character::Character(string name, int health, int stamina);

将您的敌人构造函数修改为:

Enemy::Enemy(string name, int health, int stamina, bool _isEnemy, bool _roaming) : Character(std::move(name), health, stamina), isEnemy(_isEnemy), roaming(_romaing){
}

这还需要将Character构造函数中的name参数也移到Character类的name成员中,如果尚未完成。

© www.soinside.com 2019 - 2024. All rights reserved.