c++程序

设计一个人类Person,有编号、姓名两个数据成员;Person类是抽象类,类中定义虚函数getMessage()函数返回对象的信息。从Person类派生出2个具体类:学生类Student和教师类Teacher。其中,学生数据有编号、姓名、班级,教师数据有编号、姓名、部门。学生类Student和教师类Teacher都有带3个参数的构造函数,通过初始化表向父类构造函数传递编号、姓名的值。Student类重写getMessage()函数,返回信息以“学生:”开头。Teacher类重写getMessage()函数,返回信息以“教师:”开头。main函数中,定义一个Student类对象和一个Teacher类对象,定义对象时通过参数给出数据成员的值。通过基类指针来调用派生类中的虚函数getMessage(),输出学生类和教师类对象的信息。提示:在函数中可以使用stringstream类实现构造所需字符串并返回字符串,例如:

stringstream oss;

oss<<""编号:""<<id<<"",姓名:""<<name;

 string message=oss.str();

    return message;

注:stringstream类需要引入头文件#include<sstream>

#include <sstream>

#include <string>

#include <iostream>

class Person {

protected:

    std::string id;

    std::string name;

public:

    Person(std::string id, std::string name) : id(id), name(name) {}

    virtual std::string getMessage() = 0;

};

class Student : public Person {

private:

    std::string classId;

public:

    Student(std::string id, std::string name, std::string classId)

        : Person(id, name), classId(classId) {}

    std::string getMessage() override {

        std::stringstream oss;

        oss << "学生:编号:" << id << ", 姓名:" << name << ", 班级:" << classId;

        return oss.str();

    }

};

class Teacher : public Person {

private:

    std::string department;

public:

    Teacher(std::string id, std::string name, std::string department)

        : Person(id, name), department(department) {}

    std::string getMessage() override {

        std::stringstream oss;

        oss << "教师:编号:" << id << ", 姓名:" << name << ", 部门:" << department;

        return oss.str();

    }

};

int main() {

    Person* persons[2];

    persons[0] = new Student("001", "张三", "计算机科学与技术");

    persons[1] = new Teacher("002", "李四", "计算机科学与技术");

    for (int i = 0; i < 2; ++i) {

        std::cout << persons[i]->getMessage() << std::endl;

    }

    delete persons[0];

    delete persons[1];

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值