嘿伙计们所以我正在制作一个基本程序,要求我们练习构造函数,但我不明白为什么我得错了输出。每当我运行代码时,我总是把bob作为我的输出而不是其他的bob。如果有人能告诉我我做错了什么以及如何解决它会很棒!
以下是我的.h文件:
#include <iostream>
#include <string>
using namespace std;
class creature{
public:
creature();
creature(int a);//initalizes the name of the creature based on what the user chooses(1,2, or 3 determines the monster name)
string getName();//accessor for the name
string getColor();//accessor for the color
private:
string name;
string color;
};
以下是我的一个cpp文件:
creature::creature(){
name="bob";
color="black";
}
creature::creature(int a)
{
if(a==1)
name="bob_1";
else if(a==2)
name="bob_2";
else if(a==3)
name="bob_3";
}
string creature::getName()
{
return name;
}
以下是我的一个cpp文件:
#include "creature.h"
int main()
{
creature monster;
int choice;
cout << "Enter 1 2 or 3 to choose your creature" << endl;
cin >> input;
if (input == 1)
{
creature(input);
cout << "Congratulations you have chosen " << monster.getName() <<;
}
else if (input == 2)
{
creature(choice);
cout << "Congratulations you have chosen " << monster.getName() <<;
}
else if (input == 3)
{
creature(input);
cout << "Congratulations you have chosen " << monster.getName() <<;
}
}
答案 0 :(得分:5)
此代码:
creature monster;
使用无参数构造函数创建怪物。然后:
creature(choice);
只是创建并立即销毁同一类型的无名临时,但绝不会修改原始怪物。
您可能需要以下内容:
monster = creature(choice);
或许变量应该是一个指针,也许是一个聪明的指针:
std::unique_ptr<creature> monster;
...
monster.reset(new creature(choice));
答案 1 :(得分:4)
您已在行
中创建了monster
creature monster;
使用默认构造函数。看起来你需要一个&#34;工厂&#34;按需创建生物的功能,否则
creature(input);
只是创建一个与原始monster
无关的临时文件。在您的情况下,您还可以使用编译器生成的复制构造函数并编写
monster = creature(input);
因此,您的原始monster
正在重新分配新创建的。{/ p>