我需要一些关于c ++的见解;用string和int重载

时间:2017-02-01 18:27:54

标签: c++

我们在课堂上练习了这个练习:

  

使用默认参数,编写一个向用户询问数字并返回该数字的函数。该函数应该接受来自调用代码的字符串提示。如果调用者没有为提示提供字符串,则该函数应使用通用提示。接下来,使用函数重载,编写一个实现相同结果的函数。

措辞令人困惑,但我知道我需要两个方法,一个是int和一个字符串来重载。

但在与我的老师交谈后,他解释说,使用该程序,用户应该能够输入和输入5或字符串" 5",程序应该能够确定它是否是int或string并输出它。

我已经查看了这个练习,并且有几个"解决方案",其中没有一个在我老师的参数范围内工作。

是否有可能像我老师解释的那样创建一个程序?

如果没有,是否有人对说明书有任何其他解释?

1 个答案:

答案 0 :(得分:2)

老师的措辞转化为:

#include <string>
#include <iostream>
#include <stdexcept>

/**
 * Prompts the user for an integer input on standard input, and
 * returns it. The prompt text is #prompt_text, or "Enter input please"
 * if not given.
 * 
 * @throws std::runtime_error if input is not an integer
 */
int promptForInput(const std::string& prompt_text = "Enter input please")
{
   std::cout << prompt_text << ": " << std::flush;

   int result;
   if (std::cin >> result)
      return result;
   else
      throw std::runtime_error("Could not understand your input");
}

int main()
{
   const int x = promptForInput();
   std::cout << "You entered: " << x << std::endl;

   const int y = promptForInput("Gimme intz lol");
   std::cout << "You entered: " << y << std::endl;
}

使用重载而不是默认参数,函数是这样的:

/**
 * Prompts the user for an integer input on standard input, and
 * returns it. The prompt text is #prompt_text.
 * 
 * @throws std::runtime_error if input is not an integer
 */
int promptForInput(const std::string& prompt_text)
{
   std::cout << prompt_text << ": " << std::flush;

   int result;
   if (std::cin >> result)
      return result;
   else
      throw std::runtime_error("Could not understand your input");
}

/**
 * Prompts the user for an integer input on standard input, and
 * returns it. The prompt text is "Enter input please".
 * 
 * @throws std::runtime_error if input is not an integer
 */
int promptForInput()
{
   return promptForInput("Enter input please");
}

在这两种情况下,该程序的输出如下:

[tomalak@andromeda ~]$ ./test2
Enter input please: 4
You entered: 4
Gimme intz lol: 62
You entered: 62

如果输入非整数,则会收到非描述性过程错误:

[tomalak@andromeda ~]$ ./test2
Enter input please: lol
terminate called after throwing an instance of 'std::runtime_error'
  what():  Could not understand your input
Aborted (core dumped)

(N.B。我建议在try中出现catch / main情况,但我无法打扰。)

  

但在与老师交谈之后,他解释说,用程序用户应该能够输入int 5或字符串“5”,程序应该能够确定它是int还是字符串并输出它

我无法想象这是对的;它似乎毫无意义,它与引用的任务无关。我相信你误解了这次谈话。