C++ 对象的第二个实例无法正常工作
因此,我正在从我的课堂教材开始编写一个例子:早期对象,我遇到了一个问题。我被指示创建一个程序,读入一些数据并在最后打印出来,总共2个实例。当第二个实例(md2)运行时,它不允许我在第一个字段中输入任何内容。这真的让我烦透了,我想不出来。提前谢谢C++ 对象的第二个实例无法正常工作,c++,instance,C++,Instance,因此,我正在从我的课堂教材开始编写一个例子:早期对象,我遇到了一个问题。我被指示创建一个程序,读入一些数据并在最后打印出来,总共2个实例。当第二个实例(md2)运行时,它不允许我在第一个字段中输入任何内容。这真的让我烦透了,我想不出来。提前谢谢 #include <iostream> using namespace std; class MovieData { private: string movieTitle; string movieDirector;
#include <iostream>
using namespace std;
class MovieData
{
private:
string movieTitle;
string movieDirector;
int movieYear;
int movieRunTime;
public:
MovieData()
{
GetTitle();
GetDirector();
GetYear();
GetRunTime();
}
void GetTitle()
{
cout << "Specify A Title\n";
getline(cin, movieTitle);
cout << endl;
}
void GetDirector()
{
cout << "Specify A Director" << endl;
getline(cin, movieDirector);
cout << endl;
}
void GetYear()
{
cout << "Specify A Year" << endl;
cin >> movieYear;
cout << endl;
}
void GetRunTime()
{
cout << "Specify A Duration In Minutes" << endl;
cin >> movieRunTime;
cout << endl;
}
void SetTitle()
{
cout << "R" << movieTitle << endl;
}
void SetDirector()
{
cout << "R" << movieDirector << endl;
}
void SetYear()
{
cout << "R" << movieYear << endl;
}
void SetRunTime()
{
cout << "R" << movieRunTime << endl;
}
};
void PrintData(MovieData md);
int main() {
MovieData md1;
PrintData(md1);
MovieData md2;
PrintData(md2);
}
void PrintData(MovieData md)
{
md.SetTitle();
md.SetDirector();
md.SetYear();
md.SetRunTime();
cout << endl;
}
#包括
使用名称空间std;
类电影资料
{
私人:
弦乐电影;
弦乐电影导演;
国际电影年;
国际电影时间;
公众:
电影资料()
{
GetTitle();
GetDirector();
GetYear();
GetRunTime();
}
void GetTitle()
{
CUT< P>之所以发生这种情况,是因为在编写<代码> Md1时,从最终用户读取的最后一项是“代码> int 。最终用户键入整数,然后按Enter。C++将整数读入MovirunTime//C>中,但留下字符代码用于下一次读的缓冲。
下一次,输入字符的代码将返回到GetTitle
,这意味着标题将变成一个空字符串。这就是您正在观察的行为
要解决此问题,请添加对构造函数的调用:
MovieData()
{
GetTitle();
GetDirector();
GetYear();
GetRunTime();
std::cin.ignore(256, '\n');
}
旁注:您不需要实例化对象吗?@BlackFrog在Java或C#中,每个对象都是指针,因此您需要使用new
命令初始化MovieData
。(即MovieData md1=new MovieData()这个例子是C++。在C++中,简单地声明类的实例将调用构造函数。是的,我想这就是你的意思。我记得从那些语言中,但我想知道你为什么提到它LOL.KARITE36。我认为学习正在发生的事情是你任务的一大部分。缓冲的效果将出现在输入和输出都有多个位置,因此了解这里发生的事情非常有用。没有注意到复选标记。它起作用了。我们从未涉及缓冲,问题所在的章节也没有涉及缓冲。看看学校每学期使用单独的书籍时会发生什么?不一致。