私はまだC++を学んでいて、そのようなsthを行う方法がわかりません。
名前、IDなどのフィールドを持つクラスStudentがあります。
cin>>aStudentですべての情報を入力してもらうと思います。これはとても奇妙です(Javaでは一致しません)どのようにオーバーロードすることができますか>>それでそれはそのように機能しますか?
私はまだC++を学んでいて、そのようなsthを行う方法がわかりません。
名前、IDなどのフィールドを持つクラスStudentがあります。
cin>>aStudentですべての情報を入力してもらうと思います。これはとても奇妙です(Javaでは一致しません)どのようにオーバーロードすることができますか>>それでそれはそのように機能しますか?
ナイーブな解決策は次のとおりです。
struct Student { string name; int id; … };
std::istream& operator>>(std::istream& is, Student& s) {
return is >> s.name >> s.id >> …;
}
name
単純ですが、これには空白なしで入力する必要があるという欠点があります。これはおそらくあなたが望むものではありません。実際には、通常、一度に1つずつフィールドの入力を求める必要があります。
Student s;
std::cout << "name: ";
std::getline(std::cin, s.name);
std::cout << "id : ";
std::cin >> id;
⋮
これでも、入力エラーやオプションの終了などを処理しないため、単純化されすぎています。ただし、必要なものに近づける必要があります。
あなたはoperator>>
のistream
ように過負荷する必要があります
std::istream& operator>>(std::istream& stream, Student& s){
//read from stream
return stream;
}
学生の友達にします