我有一个带有虚拟 equals() 函数的 Person 基类,用于检查新的 Person 对象是否重复。 Person 有两个派生类,Student 和 Instructor。还有另一个 Family 类,它有一个 Person/Student/Instructor 对象的向量和一个 addPerson() 函数。我想要检查重复项然后将新对象添加到向量的功能。我在使用该函数的语法时遇到了麻烦。
Person 类的截断版本:
class Person
{
protected:
string m_name{};
int m_age{};
public:
Person(string name, int age) :m_name{ name }, m_age{ age }
{
}
virtual bool equals(const Person& newMember) const { return (newMember.m_name == m_name && newMember.m_age == m_age); }
}
学生班:
class Student : public Person
{
private:
string m_major{};
double m_gpa{};
public:
Student(string name, int age, string major, double gpa) :Person{ name, age }, m_major{ major }, m_gpa{ gpa }
{
}
bool equals(const Student& newMember) const { return (Person::equals(newMember) && m_major == newMember.m_major && m_gpa == newMember.m_gpa)
}
家庭班:
class Family
{
private:
vector<shared_ptr<Person>> members;
public:
void addPerson(shared_ptr<Person> newMember)
{
for (int i = 0; i < members.size(); ++i)
{
if (members[i]->equals(newMember)
cout << "The person is already in the family";
else
members.emplace_back(make_shared<newMember>);
};
}
}
我在正确使用共享指针时遇到了很多麻烦。目标是让 vector 存储基类和派生类对象,并能够对添加的任何类型的对象(无论是人还是学生)正确使用 equals()。