首页 > 解决方案 > 初始化变量未返回正确值

问题描述

当我初始化 hp、damage 和 speed 并调用 getter 时,返回的值不是初始化值,而是更大的负数。我错过了什么?这是我的基类和 main.cpp

class Character
{
public:
    //constructor to initialize data members
    explicit Character(string cname)
        : name{ cname }, hp{ 10 }, damage{ 5 }, speed{ 2 }
        {}
    Character();
    //call to member function that problem Character depending on user inputs
        virtual void special(); //polymorphic special attack

       int getHp()
        {
            return hp;
        }

        string getName()
        {
            return name;
        }

        int getDamage()
        {
            return damage;
        }

        int getSpeed()
        {
            return speed;
        }

        void setName(std::string cname)
        {
            name = cname;
        }

private:
    string name;
    int hp;
    int damage;
    int speed;


int main()
{
    string name = "";
    int choice = 0;
    //declare Picker class
    Warrior war;
    Mage mage;
    Assassin assn;
    std::vector<Character*> cptr(3);
    cptr[0] = &war;
   
    cout << "Please enter a name for your character\n";
    cin >> name;
    war.setName(name);
    cout << "Here are your characters attributes\n\n";
    cout << "Name is: " << war.getName() << "\n";

直接调用基类可以正常工作,通过派生类会给我很大的负数

添加派生类:

#ifndef Warrior_H
#define Warrior_H
#include "Character.h"
#include <iostream>
using std::cout;


class Warrior: public Character
{
public:
    //constructor to initialize data members
    explicit Warrior()
        : attack{ "Berserker Strike" }, weapon {"War Hammer"}
    {}


        void special(); //polymorphic special attack
        void basic();
        string getClassWeapon() { return weapon; }

private:
    string attack;
    string weapon;
};

标签: c++constructor

解决方案


您需要调用基类的正确构造函数:

  explicit Warrior() : Character(""), attack{ "Berserker Strike" }, weapon {"War Hammer"} {}

或更新默认构造函数以初始化这些变量(您可能能够调用已有的显式构造函数或使用单独的 init 函数):

    Character() : name{""}, hp{10}, damage{5} {}

推荐阅读