c++ - 初始化变量未返回正确值
问题描述
当我初始化 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;
};
解决方案
您需要调用基类的正确构造函数:
explicit Warrior() : Character(""), attack{ "Berserker Strike" }, weapon {"War Hammer"} {}
或更新默认构造函数以初始化这些变量(您可能能够调用已有的显式构造函数或使用单独的 init 函数):
Character() : name{""}, hp{10}, damage{5} {}
推荐阅读
- c# - 如何在 asp.net core mvc 项目中使用 graphviz?
- solr - 如何在 SOLR 的 strdist 函数中定义自定义类?
- gitlab - 为 gitlab 设置 docker 注册
- android - Flutter/Dart 强制请求使用 wifi,即使没有互联网
- javascript - 引导表单不适用于 formspree:警告:validateDOMNesting(...):
- macos - 下载flutter后打开终端时出现奇怪的命令行
- javascript - Dropzone processQueue 没有做任何事情
- java - 如何使用 resultSet.getTables() 打印带有列名和列信息的表格?
- compiler-errors - 如何解决 OMNeT++ 中的序列化程序错误?
- iis - IIS 反向代理改为重定向