C++(3)_异质链表

终于考完了万恶的期末考,有时间把落下的blog更一下

异质链表

异质链表means链表内节点类型可以不是同一种。
下面放上课程作业(一个小型的学校信息管理系统)中成员类型定义的.h文件。
其中有一个抽象节点(Node)基类Person类,其它类都在此基础上继承;
故在链表(HeterList)类中,定义链表头指针时,只需要将头指针定义为基类类型即可通过该头指针指向其继承类。

#include <iostream>
#include <string>

using namespace std;

//友元类需要事先声明
class HeterList;

/*
*节点类,各类class的定义
*/
//抽象基类 Person
class Person
{
    friend class HeterList;

public:
    //构造函数
    //Person():_name(""),_sex('M'),_age(0),_IDnumber(""),_next(NULL){}

    Person(char *name, char sex, int age, char *IDnumber)
    :_sex(sex),_age(age),_next(NULL)
    {
        strcpy_s(Person::_name, name);
        strcpy_s(Person::_IDnumber, IDnumber);
    }


    //纯虚函数
    virtual void addNode() = 0;     //将对象添加进链表,变成一个节点
    virtual void display() = 0;     //显示信息

    //析构函数
    ~Person() {}

//希望与派生类分享,但不想被其他公共访问的成员
protected:
    char _name[20];
    char _sex;
    int _age;
    char _IDnumber[20];

    static Person *_ptr;    //定义一个指向Person类对象的静态指针
    Person *_next;          //指向下一个节点的指针
};

//教师类
class Teacher:public Person
{
    friend class HeterList;

public:
    //构造函数
    //Teacher():Person(),_fund(0),_major(""),_salary(0){}

    Teacher(char *name, char sex, int age, char *IDnumber, int fund, char *major, int salary)
        :Person(name, sex, age, IDnumber),_fund(fund),_salary(salary)
        {
            strcpy_s(Teacher::_major, major);
        }


    //重写将对象添加进链表函数
    void addNode()
    {
        _ptr = new Teacher(_name, _sex, _age, _IDnumber, _fund, _major, _salary);
    }

    //重写信息显示函数
    void display()
    {
        cout<<"Name:"<<_name<<endl;
        cout<<"Sex:"<<_sex<<endl;
        cout<<"Age:"&l
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值