C++实验八 多态与虚函数

C++ 实验八 多态与虚函数

某小型公司有四类人员:总经理、技术人员、销售经理、推销员。设计一个基类employee,
派生出manager(总经理)、technician(技术人员)、salesmanager(销售经理)、saleman(推销员)。销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager 和salesman 两个类。
1、类定义
1)employee 类:
基本信息:编号、姓名、性别、出生日期、职位、薪水等;
出生日期使用自定义的 Date(日期)类;
其中:基本信息为 private 属性,成员函数为public 属性;
多个构造函数:缺省构造函数、带参数的构造函数、带默认参数的构造函数;
可以从外部访问类成员的友员函数;
2)Date 类:
成员变量:年、月、日
成员函数:SetYear(int year)、SetMonth(int month)、SetDay(int day)
GetYear()、GetMonth()、GetDay()
3)派生类technician:新增属性:工作时间
派生类saleman: 新增属性:销售额、所属部门
2、实现人员信息的录入与显示;
3、计算并显示个人月薪:
月薪计算办法:总经理拿固定月薪8000 元,技术人员按每小时25 元领取月薪;推销员
的月薪按当月销售额的4%提成;销售经理固定月薪5000 元加所管辖部门当月销售总额的5
‰ 。
附加要求
1、将实验中三不同员工的工资计算函数pay(),用虚函数实现;
2、将每个类中的信息显示函数:display()用虚函数实现;
3、对每个类增加一个升职函数:promote();

Employee.h

//Employee.h
#pragma once
#include <string>
using namespace std;    //或者用(using std::string;)也可以解决string报错

class Date         //Date类
{
   
protected:
	int year, month, day;
public:
	Date(int y = 0, int m = 0, int d = 0);
	void setYear(int y);
	void setMonth(int m);
	void setDay(int d);
	int getYear();
	int getMonth();
	int getDay();
};
class Employee    //Employee类
{
   
protected:
	int number;
	string name;
	char sex;
	Date birthday;
	string post;
	int wages;
public:
	Employee();
	Employee(int, string, char, Date, string);
	virtual void Pay() = 0;
	virtual void Show() = 0;
	virtual void Promote(int);
};

注意:
//两个.cpp都引用.h文件出现的重定义问题的解决:将函数实现放在.cpp文件中,另外.h中定义全局变量也会出现这种问题
Employee.cpp

#include <iostream>
#include "Employee.h"
#include <string>
#include <iomanip>
using namespace std;
Date::Date(int y, int m, int d)
{
   
	year = y;
	month = m;
	day = d;
}
void Date::setYear(int y) {
    year = y; }
void Date::setMonth(int m) {
    month = m; }
void Date::setDay(int d) {
    day = d; }
int Date::getYear() {
    return year; }
int Date::getMonth() {
    return month; }
int Date::getDay() {
    return day; }

Employee::Employee() {
   }
Employee::Employee(int num, string na, char se, Date bi, string po)
{
   
	
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
多态性是面向对象编程中的一个重要概念,它允许不同的对象对同一个消息做出不同的响应。在C++中,通过虚函数实现多态性。在引用中的第一个程序中,定义了一个基类ONE和两个派生类TWO和THREE。基类ONE中定义了一个虚函数f(),派生类TWO和THREE都对该虚函数进行了重写。在main函数中,通过指针p调用了基类ONE和派生类THREE中的f()函数。由于f()函数是虚函数,在运行时会根据指针的实际类型来确定调用哪个版本的f()函数。因此,在p指向派生类THREE的对象时,调用的是派生类THREE中的f()函数。这就是多态性的体现。中的程序二中,定义了一个基类Base和一个派生类SubClass。基类Base中定义了一个虚函数fn(),派生类SubClass对该虚函数进行了重写。在main函数中,通过指针p分别调用了基类Base和派生类SubClass中的fn()函数。同样地,由于fn()函数是虚函数,在运行时会根据指针的实际类型来确定调用哪个版本的fn()函数。因此,当p指向派生类SubClass的对象时,调用的是派生类SubClass中的fn()函数。这也是多态性的一种表现形式。中的程序中,定义了一个类A和一个派生类B。类A中有两个私有的整型变量a和b,并定义了构造函数进行初始化,以及成员函数geta()和getb()来获取a和b的值。派生类B从类A继承并覆盖了geta()函数,使其返回a的两倍。在main函数中,声明了一个类B的对象,并调用了该对象中的geta()函数,将结果输出。这里也涉及到了多态性,因为通过指针p调用的是派生类B中的geta()函数,而不是基类A中的geta()函数。123 #### 引用[.reference_title] - *1* *2* *3* [C++实验8报告多态性与虚函数](https://blog.csdn.net/qq_44621510/article/details/90724548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值