我怎样才能更轻松地做到这一点?

时间:2021-07-02 16:03:42

标签: c++ class

假设我有两个类,ab,我有 2 个对象,choice1choice2

我要求用户输入一个数字。如果用户输入 1,我将使用 choice1,否则 choice2 如果它是 2

当我尝试使用用户选择的对象时,我不知道我将如何进行,因为我不知道它是哪个对象。

有没有一种方法可以比我在下面所做的更容易地管理它?

int choice;
a choice1;
b choice2;
cout << "Enter 1 or 2";
cin >> choice;

if(choice == 1)
   choice1.setName("Carl");
else
   choice2.setName("Carl");

1 个答案:

答案 0 :(得分:1)

在评论中,您说 ab 有一个共同的基类。在这种情况下,setName() 应该是该基类的成员,然后您可以这样做:

base *b;
if (choice == 1)
    b = &choice1;
else
    b = &choice2;

/* alternatively:
base *b = (choice == 1) ? static_cast<base*>(&choice1) : static_cast<base*>(&choice2);
*/

b->setName("Carl");

如果稍后添加更多也共享此公共基类的对象,则考虑使用数组而不是一系列 if,例如:

int choice;
a choice1;
b choice2;
c choice3;
...
base* choices[] = {&choice1, &choice2, &choice3};

cout << "Enter 1-3";
cin >> choice;

if ((choice >= 1) && (choice <= 3))
    choices[choice-1]->setName("Carl");