C++实践参考——职员有薪水了

【项目 - 职员有薪水了】
(1)定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要求派生类CEmployee的构造函数显示调用基类CPerson的构造函数,并为派生类CEmployee定义析构函数,定义输出信息的函数。

class CPerson
{
protected:
    string m_szName;
    string m_szId;
    int m_nSex;//0:women,1:man
    int m_nAge;
public:
    CPerson(string name,string id,int sex,int age);
    void Show1();
    ~CPerson();
};

class CEmployee:public CPerson
{
private:
    string m_szDepartment;
    double m_Salary;
public:
    CEmployee(string name,string id,int sex,int age,string department,double salary);
    void Show2();
    ~CEmployee();
};

int main()
{
    string name,id,department;
    int sex,age;
    double salary;
    cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:\n";
    cin>>name>>id>>sex>>age>>department>>salary;
    CEmployee employee1(name,id,sex,age,department,salary);
    employee1.Show2();
    return 0;
}

下面的运行结果供参考:


[参考解答]

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

class CPerson
{
protected:
    string m_szName;
    string m_szId;
    int m_nSex;//0:women,1:man
    int m_nAge;
public:
    CPerson(string name,string id,int sex,int age);
    void Show1();
    ~CPerson();
};

class CEmployee:public CPerson
{
private:
    string m_szDepartment;
    double m_Salary;
public:
    CEmployee(string name,string id,int sex,int age,string department,double salary);
    void Show2();
    ~CEmployee();
};

CPerson::CPerson(string name,string id,int sex,int age)
{
    m_szName=name;
    m_szId=id;
    m_nSex=sex;
    m_nAge=age;
}

void CPerson::Show1()
{
    cout<<setw(10)<<m_szName<<setw(25)<<m_szId;
    if(m_nSex==0)
        cout<<setw(7)<<"women";
    else
        cout<<setw(7)<<"man";
    cout<<setw(5)<<m_nAge<<endl;
}

CPerson::~CPerson() { }

CEmployee::CEmployee(string name,string id,int sex,int age,string department,double salary)
    :CPerson(name,id,sex,age)
{
    m_szDepartment=department;
    m_Salary=salary;
}

void CEmployee::Show2()
{
    cout<<setw(10)<<"name"<<setw(25)<<"id"<<setw(7)<<"sex"<<setw(5)<<"age"<<setw(12)<<"department"<<setw(10)<<"salary"<<endl;
    cout<<setw(10)<<m_szName<<setw(25)<<m_szId;
    if(m_nSex==0)
        cout<<setw(7)<<"women";
    else
        cout<<setw(7)<<"man";
    cout<<setw(5)<<m_nAge;
    //由于基类CPerson的成员变量采用了protected属性,因此可采用上述述代码实现,否则若
    //基类CPerson的成员变量采用了privated属性,则只能使用CPerson::Show();实现
    cout<<setw(12)<<m_szDepartment<<setw(10)<<m_Salary<<endl;
}

CEmployee::~CEmployee() {}

int main()
{
    string name,id,department;
    int sex,age;
    double salary;
    cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:\n";
    cin>>name>>id>>sex>>age>>department>>salary;
    CEmployee employee1(name,id,sex,age,department,salary);
    employee1.Show2();
    return 0;
}

(2)字符串除了用C++扩充的string类型外,按C语言的传统,还可以用char *表示。请将类声明中的string全部改为char *后,重新写一遍程序(此时的区别是,类中有指针成员,构造和析构函数需要考虑深复制的问题了。)

class CPerson
{
protected:
    char *m_szName;
    char *m_szId;
    int m_nSex;//0:women,1:man
    int m_nAge;
public:
    CPerson(char *name,char *id,int sex,int age);
    void Show1();
    ~CPerson();
};
class CEmployee:public CPerson
{
private:
    char *m_szDepartment;
    float m_Salary;
public:
    CEmployee(char *name,char *id,int sex,int age,char *department,float salary);
    void Show2();
    ~CEmployee();
};
int main()
{
    char name[10],id[19],department[10];
    int sex,age;
    float salary;
    cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:\n";
    cin>>name>>id>>sex>>age>>department>>salary;
    CEmployee employee1(name,id,sex,age,department,salary);
    employee1.Show2();
    return 0;
}

[参考解答]

#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;

class CPerson
{
protected:
    char *m_szName;
    char *m_szId;
    int m_nSex;//0:women,1:man
    int m_nAge;
public:
    CPerson(char *name,char *id,int sex,int age);
    void Show1();
    ~CPerson();
};

class CEmployee:public CPerson
{
private:
    char *m_szDepartment;
    float m_Salary;
public:
    CEmployee(char *name,char *id,int sex,int age,char *department,float salary);
    void Show2();
    ~CEmployee();
};

CPerson::CPerson(char *name,char *id,int sex,int age)
{
    m_szName=new char[strlen(name)+1];
    strcpy(m_szName,name);
    m_szId=new char[strlen(id)+1];
    strcpy(m_szId,id);
    m_nSex=sex;
    m_nAge=age;
}

void CPerson::Show1()
{
    cout<<setw(10)<<m_szName<<setw(25)<<m_szId;	//setw:设置输出数据的宽度,使用时应#include <iomanip.h>
    if(m_nSex==0)
        cout<<setw(7)<<"women";
    else
        cout<<setw(7)<<"man";
    cout<<setw(5)<<m_nAge<<endl;
}

CPerson::~CPerson()
{
    delete [ ]m_szName;
    delete [ ]m_szId;
}

CEmployee::CEmployee(char *name,char *id,int sex,int age,char *department,float salary)
    :CPerson(name,id,sex,age)
{
    m_szDepartment=new char[strlen(department)+1];
    strcpy(m_szDepartment,department);
    m_Salary=salary;
}

void CEmployee::Show2()//注意派生类输出函数应输出所有成员变量(含基类继承的成员变量)的值
{
    cout<<setw(10)<<"name"<<setw(25)<<"id"<<setw(7)<<"sex"<<setw(5)<<"age"<<setw(12)<<"department"<<setw(10)<<"salary"<<endl;
    cout<<setw(10)<<m_szName<<setw(25)<<m_szId;
    if(m_nSex==0)
        cout<<setw(7)<<"women";
    else
        cout<<setw(7)<<"man";
    cout<<setw(5)<<m_nAge;
    //由于基类CPerson的成员变量采用了protected属性,因此可采用上述述代码实现,否则若
    //基类CPerson的成员变量采用了privated属性,则只能使用CPerson::Show();实现
    cout<<setw(12)<<m_szDepartment<<setw(10)<<m_Salary<<endl;
}

CEmployee::~CEmployee()
{
    delete [ ]m_szDepartment;
}

int main()
{
    char name[10],id[19],department[10];
    int sex,age;
    float salary;
    cout<<"input employee's name,id,sex(0:women,1:man),age,department,salary:\n";
    cin>>name>>id>>sex>>age>>department>>salary;
    CEmployee employee1(name,id,sex,age,department,salary);
    employee1.Show2();
    return 0;
}
时间: 2024-10-14 07:45:53

C++实践参考——职员有薪水了的相关文章

C++第11周(春)项目2 - 职员有薪水了

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 职员有薪水了]定义一个名为CPerson的类,有以下私有成员:姓名.身份证号.性别和年龄,成员函数:构造函数.析构函数.输出信息的函数.并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水.要求派生类CEmployee的构造函数显示调用基类CPerson的构造函数,并为派生

《C语言及程序设计》实践参考——编程处理C源代码

返回:贺老师课程教学链接  实践要求 [项目5-编程处理C源代码]在CodeBlocks等IDE中都提供了代码格式整理的功能.我们可以编写程序,处理的数据就是用C写的源代码文件.C源文件是一种文本文件,可以通过程序进行操作.(1)读入一个C程序,判断其中是否只有一个main()函数,输出"暂时没有发现问题",或者"没有main()函数",或者"不能定义多个main()函数":提示1:简单处理,可以只比较判断"main()",考

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

《C语言及程序设计》实践参考——字符统计

返回:贺老师课程教学链接  实践要求 [项目2-字符统计]下面的程序可以统计出一个字符串中数字字符的个数: #include <stdio.h> int main() { char str[50]; int i=0,n=0; printf("输入字符串:"); gets(str); while(str[i]!='\0') { if(str[i]>='0'&&str[i]<='9') n++; i++; } printf("其中的数字个数

《C语言及程序设计》实践参考——字符串处理函数

返回:贺老师课程教学链接  实践要求 [项目4-字符串处理函数]指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[]:指向字符型的指针char *p2,可以操作字符数组(字符串)char str[]:更灵活的是,在函数的传递中,指针.数组名在一定程度上可以互换.请编制函数,对字符串的进行各种操作. 序 功能 用数组名作形参 用指针作形参 1 字符串str1和str2连接,连接后的结果存放到str1中 char *astrcat(char str1[], char str2[

《C语言及程序设计》实践参考——M$pszi$y是嘛意思

返回:贺老师课程教学链接  实践要求 [项目1-M$pszi$y是嘛意思?]背景:小明让同学传纸条给小丽.小丽接到会心一笑,大家却不知所云.纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u.(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己"翻译",原信中每一个字符加密为其后的第4个字符.例,输入I love u,输出M$pszi$y.[参考解答] #inclu

C++实践参考——分数类的雏形

[项目-分数类的雏形] C++中提供了多种基本的数据类型.实际上,这些远不能满足我们的需求,如复数,再如分数.我们可以自定义类支持这些数据类型. 本任务将设计一个简单的分数类,完成对分数的几个运算.一则巩固基于对象编程的方法,二则也为运算符重载等积累些感性认识. 分数类的声明为: class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用

《C语言及程序设计》实践参考——我的加班费

返回:贺老师课程教学链接  项目要求 [项目:我的加班费]小贺刚上班,按工作时间小时制领取周工资,工资标准是,每小时rate元RMB.每周工作时间40小时,如果要加班,超出部分按正常工资的1.5倍计(老板还算不错喔!).这周小贺上班的时间为hour小时,请编程序,输入rate和hour,输出小贺本周的薪水.[参考解答] #include <stdio.h> int main ( ) { double salary, sum; int hour; printf("小贺每小时薪金是: &

《C语言及程序设计》实践参考——字符串复制

返回:贺老师课程教学链接  实践要求 [项目3-字符串复制]下面的程序,将str1中除空格外的所有字符,复制到了str2中. #include <stdio.h> int main() { char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while(str1[i]!='\0') { if(str1[i]!=' ') { str2[j]=str1[i]; j++; } i++; } str