【问题标题】:Dynamic parametrized constructor issue in C++C ++中的动态参数化构造函数问题
【发布时间】:2012-12-03 08:36:32
【问题描述】:

我在这里包含一个用 C++ 编写的简单程序,我正在尝试使用参数化构造函数。我的想法是动态地实例化类并捕获所需的任务。 但每当我运行程序并输入任务 1 时,它只会打印两行(即 Enter Name.Enter Tel.No.)。它实际上应该打印“输入名称”。然后输入姓名,然后再次打印“输入电话号码”。 我该如何解决这个问题?我必须在创建对象时动态使用参数化构造函数。

    #include <iostream>
    #include <conio.h>
    #include <fstream>
    #include <string>

using namespace std;

class myClass
{
     string  fullname,telephone;

public:
       myClass(int taskType = 2)
       {
          if(taskType==1)
          {
              add_record();                  
          }
          else if(taskType==2)
          {
              //view_records();
          }
          else if(taskType==3)
          {
              //delete_record();
          }else{
             // custom_error();
          }        
       }  
void add_record()
{
cout << "Enter Name.\n";
getline(cin, fullname);
cout << "Enter Tel. No.\n";
getline(cin, telephone);
}
   };

    main (){
          int myTask;
      cout << "Enter a Task-Type. \n"
           << "1 = Add Record,"
           << "2 = View Records,"
           << "3 = Delete a Record\n\n";
      cin >> myTask;
      myClass myObject(myTask);
           getch();
     }

【问题讨论】:

    标签: c++ constructor parameterized


    【解决方案1】:

    您正在使用cin &gt;&gt; myTask 读取第一个输入。当您按回车键给出 1,选择“添加记录”时,将从缓冲区中读取 1,但您的换行符仍将在输入缓冲区中。因此,第一个 getline 只会从缓冲区中读取它,从而为行 getline(cin, fullname); 产生一个空输入

    【讨论】:

      【解决方案2】:

      原因是任务类型后面的第一个换行符没有被消费

      cin >> myTask
      

      所以fullname读取只会读取一个空行,“输入电话号码”会直接打印出来。

      cin &gt;&gt; myTask 之后插入getline 调用以解决此问题。

      另见this question

      【讨论】:

      • 非常感谢您的快速回复,我添加了 getline(cin, myTask);就在 cin >> myTask 之后,但我得到了错误 :(....我应该更改 myTask 的数据类型吗?P.S. 通过将 getline 应用于垃圾变量来解决问题。
      【解决方案3】:

      这可能与您的构造函数无关,而是与 cin >> 和 getline 的混合有关。在 cin >> myTask 之后将 getline 添加到垃圾变量中,它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-26
        • 2011-08-23
        • 1970-01-01
        相关资源
        最近更新 更多