基类和派生类共享指针向量的语法

问题描述 投票:0回答:0

我有一个带有虚拟 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()。

c++ polymorphism smart-pointers
© www.soinside.com 2019 - 2024. All rights reserved.