【发布时间】:2019-06-21 14:24:53
【问题描述】:
根据用户的选择,我无法弄清楚如何正确创建对象。
在程序中,我问用户他们想成为哪个职业——骑士或巫师。我输入“1”或“2”来代表骑士和巫师。
我做了一个 switch 语句,在案例 1 中,我声明了一个对象骑士,巫师也是如此。
我需要在 switch 语句之外使用这些对象,但我不能。我试图通过制作“玩家播放器”来制作“默认”对象;但是因为 Player 类有一个纯虚函数,我也做不到。
我如何有效地做到这一点?
这是我目前所拥有的:
int main()
{
std::string plyrName;
int input;
bool foo = false;
std::cout << "What is your name?\n";
std::cin >> plyrName;
std::cin.ignore(1000, '\n');
std::cout << "\nWelcome, " << plyrName << ". What class would you like to be?\n";
std::cout << "1. Knight.\n2. Wizard.\n";
std::cin >> input;
while (input != 1 && input != 2)
{
if (foo == true)
std::cout << "Please enter 1 for Knight and 2 for Wizard.\n";
if (!(std::cin >> input))
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "\n";
std::cout << "Only integers are allowed.\n";
}
else
std::cout << "\n";
foo = true;
}
switch (input)
{
case 1:
{
Wizard player;
break;
}
case 2:
{
Knight player;
break;
}
}
std::cout << "\nHere is your player information summary.\n";
std::cout << player.classType();
system("pause");
return 0;
}
我需要在创建后访问播放器对象,因为我想向用户输出他们选择的类。 Knight 和 Wizard 类都有输出这个的函数。
编辑:我有一个后续问题。在图中,Knight & Wizard 有一个静态变量“特殊攻击名称”。如何在主函数中访问此变量?使用 unique_ptr 的解决方案意味着指针将指向基类 Player,因此不允许访问派生类成员,例如静态变量“特殊攻击名称”。我的设计有缺陷吗?
【问题讨论】:
-
也许使用指针(最好是smart pointers)?这就是您通常在 C++ 中处理多态性的方式。
-
如果你想使用多态性,无论如何你都需要指针或引用,也许先解决这个问题,因为从字面上回答你的问题只会把你带到下一个问题
-
@user463035818 “先解决这个问题”是什么意思,回答这个问题会导致下一个问题?如果我想使用多态性并防止导致另一个问题,我将如何解决这个问题?
-
我的意思是,可以从字面上理解您的问题并编写一个“解决方案”来创建
Knight或Wizard对象,但这不会帮助您将它们都视为 @ 987654326@ 除非您使用指针或引用。请注意,答案已经考虑到了这一点(准确地说是三分之二;)
标签: c++ object if-statement