C ++中的动态参数化构造函数问题

时间:2012-12-03 08:36:32

标签: c++ constructor parameterized

我在这里包括一个用C ++编写的简单程序,我试图使用参数化构造函数。我的想法是动态地实例化该类并捕获所需的任务。 但每当我运行程序并输入任务1时,它只会打印两行(即输入Name.Enter Tel.No.)。它实际上应该打印“输入名称”。然后输入名称,然后再次打印“输入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();
     }

3 个答案:

答案 0 :(得分:4)

您正在使用cin >> myTask来阅读第一个输入。按Enter键给1,选择“Add Record”,将从缓冲区中读取1,但换行符仍然在输入缓冲区中。因此,第一个getline只会从缓冲区读取此内容,为行getline(cin, fullname);生成空输入

答案 1 :(得分:3)

原因是

未使用任务类型之后的第一个换行符
cin >> myTask

所以fullname读数只会读取一个空行,“输入Tel.No”的内容将直接打印出来。

getline之后插入cin >> myTask来解决此问题。

另见this question

答案 2 :(得分:2)

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