【发布时间】:2021-11-13 21:41:28
【问题描述】:
有一个Student抽象类,以及两个派生类Grad和Undergrad;我想以多种方式重载运算符。
student.h
class Student {
protected:
string Name;
int Stu_num;
public:
virtual void print() = 0;
bool operator==(const Student& x) const;
// constructor...
}
class Grad_Student : public Student {
private:
string Lab;
public:
void print();
bool operator==(const Grad_Student& x) const;
// constructor...
}
class Undergrad_Student : public Student {
private:
string Major;
public:
void print();
bool operator==(const Undergrad_Student& x) const;
// constructor...
}
student.cpp
bool Student::operator==(const Student& x) const {
if (this->Name == x.Name && this->Stu_num == x.Stu_num) {
if (typeid(*this).name() != typeid(x).name()) {
return false;
}
else if (!(strcmp(typeid(*this).name(), "12Grad_Student"))) {
return *dynamic_cast<const Grad_Student *>(this) == *dynamic_cast<const Grad_Student *>(&x);
}
else {
return *dynamic_cast<const Undergrad_Student *>(this) == *dynamic_cast<const Undergrad_Student *>(&x);
}
}
else {
return false;
}
}
bool Grad_Student::operator==(const Grad_Student& x) const {
return this->Lab == x.Lab;
}
bool Undergrad_Student::operator==(const Undergrad_Student& x) const {
return this->Major== x.Major;
}
在Student *students[300]中查找学生对象
这个操作==重载工作并且没有问题,
但我想使用下面的不同方式实现重载。
这个功能怎么实现??
bool operator==(const Student& x, const Student& y)
{
// do comparison...
}
【问题讨论】:
-
你有什么问题?
-
typeid的名字并没有你想象的那么有用——"the returned string can be identical for several types and change between invocations of the same program"。可以直接比较typeids。 -
所以你又问这个了? stackoverflow.com/q/69248025/817643 - 你已经被告知要获得有意义的帮助,你需要 minimal reproducible example。
-
@StoryTeller-UnslanderMonica 我想我发布这些例子是为了抓住我的意图。但我无法得到满意的答案... :(
标签: c++ inheritance operators overloading abstract