0

私はまだC++を学んでいて、そのようなsthを行う方法がわかりません。

名前、IDなどのフィールドを持つクラスStudentがあります。

cin>>aStudentですべての情報を入力してもらうと思います。これはとても奇妙です(Javaでは一致しません)どのようにオーバーロードすることができますか>>それでそれはそのように機能しますか?

4

2 に答える 2

1

ナイーブな解決策は次のとおりです。

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;
⋮

これでも、入力エラーやオプションの終了などを処理しないため、単純化されすぎています。ただし、必要なものに近づける必要があります。

于 2012-08-18T06:03:54.863 に答える
0

あなたはoperator>>istreamように過負荷する必要があります

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

学生の友達にします

于 2012-08-18T06:04:10.293 に答える