招行出国留学信用卡:关于继承和派生的一个C++问题

来源:百度文库 编辑:高考问答 时间:2024/05/12 06:20:46
//1)定义一个基类Employee,实现员工的基本信息的设置.
#include<iostream.h>
#include<string.h>

class Employee
{
public:
Employee(char *aName);
char * getName(void); //得到职工的姓名
void Disp(); //显示职工详细信息
double earnings(int salory); //计算职工的工资的虚函数
int getId(void)
{
return Id;
}
~Employee();
protected:
int Id; //职工编号
char *name; //职工姓名
};

Employee::Employee(char *aName)
{
name = new char[strlen(aName)+1];

int num;
strcpy(name, aName);

cout << "请输入 ID:";
cin >> num;
Id = num;
}

char *
Employee::getName(void)
{
return name;
}

void
Employee::Disp(void)
{
cout << "职工姓名:" << name << endl;
cout << "职工编号:" << Id << endl;
cout << "职工工资:" << earnings(60) << endl;
}

double
Employee::earnings(int salory)
{
return 30*salory;
}

Employee::~Employee()
{
delete []name;
}

class Boss:public Employee
{
public:
double earnings(int add);
Boss(char *NAME):Employee(NAME){}
void Disp(void);
~Boss();
};

void
Boss::Disp(void)
{
cout << "经理姓名:" << Employee::getName() << endl;
cout << "经理编号:" << Employee::getId() << endl;
cout << "经理工资:" << earnings(8000) << endl;
}

double
Boss::earnings(int add)
{

return ((Employee::earnings(60)) + add);
}

Boss::~Boss()
{
delete []name;
}

void main()
{
Employee work("李明");
Boss boss("李锋");

work.Disp();
boss.Disp();
}

这段程序编译没有错误,但是运行结束时老是出现系统报错。请问这是怎么回事????

Boss(char *NAME):Employee(NAME){} //使用了Employee的构造函数,所以也会调用Employee的析构函数来删除name
Boss::~Boss() //这里又调用了boss的析构函数来删除name,因为一个内存不能删除两遍,所以报错。
{
delete []name;
}