2012-12-11 64 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()方法你比较指针学生。您不需要比较运算符就可以运行。