Person类与Employee 类的多态实现

Person 类与 Employee 类的多态实现

背景

有一个基类Person类,包含了私有成员姓名和职业。

有若干派生类Employee类,继承了该类。

要求用虚函数实现Person类的多态性。

本示例演示了如何使用基类(Person)与派生类(Employee)来实现多态性。Person 类包含了人的基本信息,如姓名和职业,而 Employee 类则继承了 Person 类,并增加了员工ID的属性。通过使用虚函数(printInfo)和虚析构函数,我们实现了多态性,并确保了派生类对象的正确析构。

代码与注释

Person 类

// 引入必要的头文件
#include <iostream>
#include <string>

// 基类 Person
class Person {
private:
    // 私有成员变量:姓名
    std::string name;
    // 私有成员变量:职业
    std::string occupation;

public:
    // 构造函数,初始化姓名和职业
    Person(const std::string &name, const std::string &occupation)
            : name(name), occupation(occupation) {}

    // 纯虚函数,用于在派生类中实现多态性
    // 必须在派生类中重写该函数
    virtual void printInfo() const = 0;

    // 虚析构函数,确保派生类对象能被正确析构
    virtual ~Person() {}

protected:
    // 提供保护访问接口,供派生类访问私有成员
    // 派生类可以通过这些接口间接访问基类的私有成员
    std::string getName() const {
        return name;
    }

    std::string getOccupation() const {
        return occupation;
    }
};

Employee 类

// 派生类 Employee,继承自 Person 类
class Employee : public Person {
private:
    // 私有成员变量:员工ID
    int employeeID;

public:
    // 构造函数,初始化姓名、职业和员工ID
    Employee(const std::string &name, const std::string &occupation, int id)
            : Person(name, occupation), employeeID(id) {}

    // 重写基类的 printInfo 函数,实现多态性
    void printInfo() const override {
        std::cout << "姓名: " << getName()
                  << ", 职业: " << getOccupation()
                  << ", 员工ID: " << employeeID << std::endl;
    }

    // 析构函数,输出析构信息
    ~Employee() {
        std::cout << "~Employee dealloc" << std::endl;
    }
};

main 函数

int main() {
    // 使用基类指针指向派生类对象,展示多态性
    Person *p1 = new Employee("西门吹雪", "C++软件工程师", 12345);
    Person *p2 = new Employee("海棠花开", "嵌入式工程师", 67890);

    // 调用 printInfo 函数,输出员工信息
    p1->printInfo();
    p2->printInfo();

    // 删除动态分配的对象,释放内存
    delete p1;
    delete p2;

    // 程序结束,返回 0
    return 0;
}

运行结果

姓名: 西门吹雪, 职业: C++软件工程师, 员工ID: 12345
姓名: 海棠花开, 职业: 嵌入式工程师, 员工ID: 67890
~Employee dealloc
~Employee dealloc

说明

  • Person 类是一个抽象基类,包含一个纯虚函数 printInfo,用于在派生类中实现多态性。
  • Employee 类继承自 Person 类,并重写了 printInfo 函数,用于输出员工的详细信息。
  • main 函数中,我们使用基类指针 Person* 来指向 Employee 类的对象,并通过这些指针调用 printInfo 函数,展示了多态性的应用。
  • 程序结束时,我们正确地删除了通过 new 分配的对象,以避免内存泄漏。
    在这里插入图片描述
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值