c++ - 关于抽象类(cpp)的运算符重载
问题描述
在 student.h 文件中
class Student {
protected:
string Name;
int Stu_num;
public:
virtual void print() = 0;
// constructor...
}
class Grad_Student: public Student {
private:
string Lab;
public:
void print();
// constructor...
}
class Undergrad_Student: public Student {
private:
string Major;
public:
void print();
// constructor...
}
在 student.cpp 文件中
bool operator == (const Student& x, const Student& y) {
if (typeid(x) != typeid(y)) return false;
else // dosomething..
}
我想比较学生班的孩子;研究生和本科。在 main.cpp 中,当我比较两个学生班级时,它不起作用..
Grad_Student grad1 = Grad_Student("Max", 11, "Hubo");
Student *std1 = &grad1;
Grad_Student grad2 = Grad_Student("Max", 11, "Hubo");
Student *std2 = &grad2;
cout << (std1 == std2) << endl; // it always prints 0.
cout << (*std1 == *std2) << endl;
// I think this line should work, but makes error.
// error: invalid operands to binary expression ('Student' and 'Student')
我应该在学生课上重载 operator== 吗?给我一个提示...
解决方案
所以,你重载的相等运算符什么都不做......你需要比较身体中的一些东西并返回一个boolean
结果。
此外,您Undergrad_Student
当前不是从Student
.. 派生的。此外,由于您正在比较 2 个Student
对象,您可以让相等运算符重载一个接受 1 个参数的成员函数。
像这样的东西:
class Student {
public:
explicit Student( int id )
: id_{ id }
{ }
bool operator==( const Student& other ) const {
return id_ == other.id_;
}
virtual void print() const = 0;
virtual ~Student( ) = default;
protected:
int id_;
};
class Grad: public Student {
public:
explicit Grad( int id )
: Student{ id }
{ }
void print() const override {}
};
class Undergrad : public Student {
public:
explicit Undergrad( int id )
: Student{ id }
{ }
void print() const override {}
};
int main( ) {
Grad s1{ 11 };
Undergrad s2{ 12 };
// Prints false.
std::cout << std::boolalpha << ( s2 == s1 ) << '\n';
Grad s3{ 42 };
Undergrad s4{ 42 };
// Prints true.
std::cout << std::boolalpha << ( s3 == s4 ) << '\n';
}
推荐阅读
- php - 它只是从 textarea 中插入最后一个值
- reactjs - Elements 上不支持的道具更改:设置后您无法更改“条纹”道具
- c# - 如何使用反射来动态调用类型?
- mybatis - mybatis mapper注解中无法创建hazelcast缓存
- spring-boot - Maria DB JDBC 驱动程序使用过多 CPU
- laravel - 请问如何将数据从 show 方法共享到两个不同的视图
- c - 在c程序中的数字斐波那契之间输出','
- python - ipywidgets 和 pandas 数据框
- algorithm - 给定距离矩阵的最可能拓扑顺序
- php - 对 PHP 中“复杂”API 的 json 结果进行排序