0

3 つのインスタンス変数を持つ基本クラス Person があります。Person(string name, unsigned long id, string email) と Person を継承し、1 つの新しいインスタンスを持つ 1 つの派生クラス Student var year Student(string name, unsigned long id,int year,string email): Person(name,id,email ) と、説明する必要のない 1 つのクラスの教師。

次に、eClassという名前のクラスがあります

比較演算子 == をオーバーロードし、その演算子を関数 bool exists() で使用して、.cpp をコンパイルすると、そのエラーが発生します

エラー: メンバ関数 'Student::operator==' を 'eClass 内で定義できませ ん 誰か助けてくれませんか?

また、私はconstを理解していません

私のコードのその機能で。それは何をしますか?

bool Student::operator==(const Student* &scnd) const {... ... ...}

eClass{
  private:
  Teacher* teacher;
  string eclass_name;
  Student* students[MAX_CLASS_SIZE];
  unsigned int student_count;

   public:
   eClass(Teacher* teach, string eclsnm){
   teacher=teach;
   eclass_name=eclsnm;
  }
   bool Student::operator==(const Student* &scnd)const{
         return(getID==scnd.getID
         &&getName==scnd.getName
         &&getYear==scnd.getYear
         &&getEmail==scnd.getEmail);

   }
   bool exists(Student* stud){
       for(int i=0; i<MAX_CLASS_SIZE;++i){
       if(stud==students[i]){return TRUE;}
       }
       return FALSE;
   }
}
4

2 に答える 2

2

eClass 内で Student 比較メソッドを宣言しようとしています。あなたが示した operator== は、基本的に eClass ではなく Student に属している必要があります。この場合の const は、ポインターが決して変更されないことを保証します。これは、2 つのオブジェクトを単純に比較したい場合には絶対に望ましくありません。

于 2012-12-11T22:44:06.533 に答える
1

比較演算子をStudentクラスに移動し、参照のみ(ポインターへの参照ではない)を使用する必要があります。最後に、メソッド呼び出しで中括弧が欠落しています。

class Student : public Person {
public:
   bool operator==(const Student &scnd)const{
         return getID()==scnd.getID()
         && getName()==scnd.getName()
         && getYear()==scnd.getYear()
         && getEmail()==scnd.getEmail();
   }
};

しかし、実際にすべきことは、比較演算子の一部をクラスに移動し、PersonこれをStudentクラスで使用することです。

class Person {
public:
   bool operator==(const Person &scnd)const{
         return getID()==scnd.getID()
         && getName()==scnd.getName()
         && getEmail()==scnd.getEmail();
   }
};

class Student : public Person {
public:
   bool operator==(const Student &scnd)const{
         return Person::operator==(scnd)
         && getYear()==scnd.getYear();
   }
};

exists()メソッドでは、ポインタをStudentと比較します。これが機能するために比較演算子は必要ありません。

于 2012-12-11T23:26:34.480 に答える