2012-12-11 86 views
0

我有一個具有3個實例變量的基類Person。 學生(字符串名稱,unsigned long id,int year,字符串email) 和一個繼承Person 且具有一個新實例var年的派生類Student :Person(name ,身份證號碼,電子郵件) 和一個不需要描述的班級老師。重載比較運算符== C++

然後,有一個名爲的eclass

,我希望過載比較操作符==並使用該運營商 在功能上存在布爾() 當我編譯我的.cpp我有錯誤

錯誤:無法定義成員函數'Student :: operator =='in'eClass 任何人都可以幫助我嗎?

此外,我不明白常量

在我的代碼的功能。那是做什麼的?

布爾學生::運算符==(const的學生* & SCND)常量 {... ... ...}

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

回答

2

你試圖聲明一個學生比較方法的eclass。你顯示的operator ==應該基本屬於Student,而不是eClass。在這種情況下,const會保證你不會以任何方式改變指針,當你想簡單地比較兩個對象時,這絕對不是你想要的。

+0

這不是正確的'const'。這意味着作爲'this'傳入的對象不會被修改,除了它的'mutable'成員,它仍然可以。 – chris

+0

另外,運算符是C++中的保留字 – imulsion

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類,並在你的學生類

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()方法你比較指針學生。您不需要比較運算符就可以運行。