【发布时间】:2015-05-15 07:10:14
【问题描述】:
我有一个学生班。我想重载+ 运算符,这样我就可以在类中添加一个双变量。这是Student类:
class Student {
private:
std::string firstName;
double grade;
public:
Student(const std::string &firstName, double grade);
double getGrade() const;
friend Student operator+(double grade, const Student &student);
Student operator+(double grade) const;
};
及实施:
Student::Student(const std::string &firstName, double grade) {
this->firstName = firstName;
this->grade = grade;
}
double Student::getGrade() const {
return grade;
}
Student operator+(double grade, const Student &student) {
return Student(student.firstName, student.grade + grade);
}
Student Student::operator+(double grade) const {
return operator+(grade, *this);
}
double + Student 是通过朋友函数完成的,Student + double 是通过成员函数完成的。当我编译我得到这个:
error: no matching function for call to ‘Student::operator+(double&, const Student&) const’
return operator+(grade, *this);
^
note: candidate is:
note: Student Student::operator+(double) const
Student Student::operator+(double grade) const {
^
note: candidate expects 1 argument, 2 provided
为什么我不能从成员函数调用友元函数?
[更新]
但是,当我重载 << 运算符时,我可以从成员函数中调用它,而无需预先挂起 ::。
friend std::ostream &operator<<(std::ostream &os, const Student &student);
和实施:
std::ostream &operator<<(std::ostream &os, const Student &student) {
os << student.grade;
return os;
}
【问题讨论】:
标签: c++ operator-overloading friend-function