从控制台读取并创建类实例

时间:2012-08-18 05:57:28

标签: c++ operator-overloading overloading iostream cin

我还在学习C ++,我不知道该怎么做。

我有一个班级学生,有字段:姓名,身份等。

我想让用户通过cin>> aStudent输入所有信息。这是如此奇怪(在java中没有匹配)我如何重载>>所以它会这样工作吗?

2 个答案:

答案 0 :(得分:1)

一个天真的解决方案如下:

struct Student { string name; int id; … };

std::istream& operator>>(std::istream& is, Student& s) {
    return is >> s.name >> s.id >> …;
}

虽然简单,但它的缺点是必须输入name而没有空格,这可能不是你想要的。实际上,您通常希望一次提示一个字段:

Student s;
std::cout << "name: ";
std::getline(std::cin, s.name);
std::cout << "id  : ";
std::cin >> id;
⋮

即使这样过于简单,因为它不处理输入错误,可选终止等。但它应该更接近你想要的。

答案 1 :(得分:0)

您需要为operator>>

重载istream
std::istream& operator>>(std::istream& stream, Student& s){
   //read from stream
   return stream;
}

并使其成为学生的朋友