【问题标题】:Reading from console and creating class instance从控制台读取并创建类实例
【发布时间】:2012-08-18 05:57:27
【问题描述】:
我还在学习 C++,但我不知道该怎么做。
我有一个学生类,包含字段:姓名、ID 等。
我想让用户通过 cin>>aStudent 输入所有信息。这太奇怪了(在java中不匹配)我怎么能重载>>所以它会那样工作?
【问题讨论】:
标签:
c++
operator-overloading
overloading
iostream
cin
【解决方案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;
⋮
即使这样也过于简单了,因为它不处理输入错误、可选终止等。但它应该更接近你想要的。
【解决方案2】:
你需要为istream 重载operator>> 像
std::istream& operator>>(std::istream& stream, Student& s){
//read from stream
return stream;
}
让它成为学生的朋友