直播间是怎么刷人气的:关于继承和派生的一个C++问题
来源:百度文库 编辑:中科新闻网 时间:2024/07/03 10:09:47
//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();
}
这段程序编译没有错误,但是运行结束时老是出现系统报错。请问这是怎么回事????
#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;
}