c ++使用类和对象类的派生 结构体

img


编写学生 CStudent 、小学生 CPrimaryStudent 、中学生 CMiddlStudent 、大学生 CCollegeStudent 类,它们依次派生学生有学号、姓名、性别、年龄等4个基础数据成员,小学生有是否是少先队员的数据;中学生有是否是共青团员数据;大学生有学分数据;输入3个学生的四个基本数据、是否少先队员、是否共青团员和学分数据,用3个 CStudent 指针对象来实现,通过年龄自动生成各学生对象,年龄段小学生6—11)中学生(12—17 大学生(18—22)输出3个学生倡息,并自动输出当前学生是小学生,中学生,大学生的信息。
对外接口函数id input(int id,string name, char sex,int age);void print


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

class CStudent {
public:
    virtual ~CStudent()
    {
        //
    }

    virtual bool IsShaoXianDuiYuan() = 0;
    virtual bool IsGongQingTuanYuan() = 0;
    virtual bool ExistXueFen(int &v) = 0;
    void input(int id,string name, char sex,int age)
    {
        mId = id;
        mName = name;
        mSex = sex;
        mAge = age;
    }

    virtual void print() = 0;

public:
    int mId;
    string mName;
    char mSex;
    int mAge;
};

class CPrimaryStudent : public CStudent {
public:
    bool IsShaoXianDuiYuan()
    {
        return mShaoXianDuiYuan;
    }
    bool IsGongQingTuanYuan()
    {
        return false;
    }
    bool ExistXueFen(int &v)
    {
        return false;
    }
    void print()
    {
        cout << "CPrimaryStudent : id = " << mId
             << ", name = " << mName
             << ", sex = " << mSex
             << ", age = " << mAge
             << ", shaoxianduiyuan = " << mShaoXianDuiYuan
             << endl;
    }

public:
    bool mShaoXianDuiYuan;
};

class CMiddlStudent : public CStudent {
public:
    bool IsShaoXianDuiYuan()
    {
        return false;
    }
    bool IsGongQingTuanYuan()
    {
        return mGongQingTuanYuan;
    }
    bool ExistXueFen(int &v)
    {
        return false;
    }
    void print()
    {
        cout << "CMiddlStudent : id = " << mId
             << ", name = " << mName
             << ", sex = " << mSex
             << ", age = " << mAge
             << ", gongqingtuanyuan = " << mGongQingTuanYuan
             << endl;
    }

public:
    bool mGongQingTuanYuan;
};

class CCollegeStudent : public CStudent {
public:
    bool IsShaoXianDuiYuan()
    {
        return false;
    }
    bool IsGongQingTuanYuan()
    {
        return false;
    }
    bool ExistXueFen(int &v)
    {
        v = mXueFen;
        return true;
    }
    void print()
    {
        cout << "CCollegeStudent : id = " << mId
             << ", name = " << mName
             << ", sex = " << mSex
             << ", age = " << mAge
             << ", xuefen = " << mXueFen
             << endl;
    }

public:
    int mXueFen;
};

int main(void)
{
    CStudent *p[3] = {nullptr};
    // 读取
    for (int i = 0; i < 3; ++i) {
        int id;
        string name;
        char sex;
        int age;
        cin >> id >> name >> sex >> age;
        if (age >= 6 && age <= 11) {
            CPrimaryStudent *s = new CPrimaryStudent();
            cin >> s->mShaoXianDuiYuan;
            p[i] = s;
        } else if (age >= 12 && age <= 17) {
            CMiddlStudent *s = new CMiddlStudent();
            cin >> s->mGongQingTuanYuan;
            p[i] = s;
        } else if (age >= 18 && age <= 22) {
            CCollegeStudent *s = new CCollegeStudent();
            cin >> s->mXueFen;
            p[i] = s;
        } else {
            continue;
        }
        p[i]->mId = id;
        p[i]->mName = name;
        p[i]->mSex = sex;
        p[i]->mAge = age;
    }
    // 打印
    for (int i = 0; i < 3; ++i) {
        if (p[i] == nullptr) {
            continue;
        }
        p[i]->print();
    }
    // 释放
    for (int i = 0; i < 3; ++i) {
        if (p[i] == nullptr) {
            continue;
        }
        delete p[i];
    }
    return 0;
}