c++,想问一下这个问题该怎么做

在一个大学里,有若干教师和学生。根据这个信息设计三个类University、Teacher、Person和Student,一个接口Learnable。要求:
(1) 设计University类,里面使用常量属性:NAME,其值为NUIST。
(2) 设计Person类,属性包括姓名name和年龄age,添加无参和全参构造方法,并封装。
(3) 写出Learnable接口,里面包含study()和exercise()两个方法。
(4) 设计Teacher类(增加工号teacherID属性和工资salary属性)和Student类(增加学号studentID属性和专业major属性),它们继承Person类。
(5) University添加一个数组,里面存有所有教师和学生对象。
该类中有如下方法:
1)void register(Person person) 注册某人
2)void fire(Person person) 开除一个人
3)Person[] searchPerson(String name)根据名字查出所有与此名相同的Person,得到一个数组。
4)double getTotalSalary() 计算大学里面所有教师的工资总和。

题目应该是不全,有些要求提的也不对。
参考如下:

#include <iostream>
#include <string>
using namespace std;

class Person;
class Teacher;
class Student;


class Person
{
protected:
    string name;
    int age;
public:
    Person(){name="";age=0;}
    Person(string n,int a){name = n;age = a;}
    virtual int getType()=0;
    void setName(string na){name = na;}
    void setAge(int a){age = a;}
    string getName(){return name;}
    int getAge(){return age;}
};
//这个接口没啥用啊
class Learnable
{
public:
    static void study(){cout <<"study"<<endl;}
    static void exercise(){cout << "exercise"<<endl;}
};

class Teacher :public Person
{
private:
    int teacherId;
    double salary;
public:
    void setTeacherId(int id){teacherId = id;}
    void setSalary(double s){salary = s;}
    int getTeacherId(){return teacherId;}
    double getSalary(){return salary;}
    int getType(){return 1;} //用1表示Teacher类
};

class Student:public Person
{
private:
    int studentID;
    string major;
public:
    void setStuId(int id){studentID = id;}
    void setMajor(string m){major = m;}
    int getStuId(){return studentID;}
    string getMajor(){return major;}
    int getType(){return 2;} //用2表示Student类
};

class University
{
private:
    const string NAME;

    Person* mArray[20]; //定义一个数组
    int mCount; //数组中元素的实际个数
public:
    University():NAME("NUIST"),mCount(0)
    {
        //
    }
    //注册某人
    void regeist(Person* person) 
    {
        mArray[mCount] = person;
        mCount++;
    }
    //开除一个人
    void fire(Person* person) 
    {
        int i=0;
        for ( i = 0;i<mCount;i++)
        {
            if (mArray[i]==person)
            {
                for (int j=i;j<mCount-1;j++)
                {
                    mArray[j] = mArray[j+1];
                }
                mCount--;
                break;
            }
        }
        
    }
    //根据名字查出所有与此名相同的Person,得到一个数组。
    Person** searchPerson(string name,int &nmb)
    {
        nmb = 0;
        Person** array = new Person*[mCount];
        for (int i = 0;i<mCount;i++)
        {
            if (mArray[i]->getName().compare(name)==0)
            {
                array[nmb++] = mArray[i];
            }
        }
        return array;
    }
    //计算大学里面所有教师的工资总和。
    double getTotalSalary() 
    {
        double sum=0;
        for (int i = 0;i<mCount;i++)
        {
            //string claname = typeid(*mArray[i]).name();
            if(mArray[i]->getType() == 1)
            {
                Teacher* t = (Teacher*) mArray[i];
                sum += t->getSalary();
            }
        }
        return sum;
    }

};

int main()
{
    Teacher* t1 = new Teacher();
    t1->setName("张三");
    t1->setAge(34);
    t1->setTeacherId(1234);
    t1->setSalary(5000);

    Teacher* t2 = new Teacher();
    t2->setName("李四");
    t2->setAge(38);
    t2->setTeacherId(1235);
    t2->setSalary(6000);


    Student* stu1 = new Student();
    stu1->setName("张三");
    stu1->setAge(18);
    stu1->setStuId(11111);
    stu1->setMajor("物理系");

    Student* stu2 = new Student();
    stu2->setName("学生2");
    stu2->setAge(19);
    stu2->setStuId(11112);
    stu2->setMajor("生物系");

    Student* stu3 = new Student();
    stu3->setName("学生3");
    stu3->setAge(20);
    stu3->setStuId(11113);
    stu3->setMajor("生物系");

    //注册
    University ut;
    ut.regeist(t1);
    ut.regeist(t2);
    ut.regeist(stu1);
    ut.regeist(stu2);
    ut.regeist(stu3);

    //开除
    ut.fire(stu2);

    //查询
    int nmb=0;
    Person** p = ut.searchPerson("张三",nmb);

    cout << "找到名字为张三的人数:"<<nmb<<endl;

    //计算工资
    double ss = ut.getTotalSalary();
    cout << "所有教师的工资为:"<<ss;


    return 0;
}