C++实践参考——人数不定的工资类

返回:贺老师课程教学链接

【项目-人数不定的工资类】
设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出。
提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用。将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据。

class Salary
{
public:
    Salary(int n);  //n为职工人数,初始化时完成空间的分配
    ~Salary();      //析构函数中释放初始化时分配的空间
    void input_salary();
    void show_salary();
private:
    double *salary;
    int number;
};
//下面定义类的成员函数
……
//下面是测试函数
int main()
{
    Salary s(10);
    s.input_salary();
    s.show_salary();
    return 0;
}

[参考解答]

#include<iostream>
using namespace std;
class Salary
{
public:
    Salary(int n);
    Salary(const Salary &s);   //请看一楼的评论,原题目中没有要求写复制构造函数是设计上的缺陷,应该加上
    ~Salary();
    void input_salary();
    void show_salary();
private:
    double *salary;
    int number;
};

Salary::Salary(int n)
{
    number=n;
    salary = new double[number];  //根据职工人数,确定分配空间的大小
}

Salary::Salary(const Salary &s)
{
    number = s.number;
    salary = new double[number];
    for(int i=0;i<number; ++i)
        *(salary+i)=*(s.salary+i);
}

Salary::~Salary()
{
    delete []salary;   //注意:必须在析构函数中释放动态分配的空间
}

void Salary::input_salary()
{
    int i;
    cout << "请输入"<<number<<"名职工的工资:" << endl;
    for(i = 0; i < number; ++i)
     cin >> *(salary+i);
    return ;
}

void Salary::show_salary()
{
    cout << "职工工资清单: " ;
    for(int i = 0; i < number; ++i)
        cout << *(salary+i)<<" ";
    cout << endl;
    return ;
}

int main()
{
    Salary s1(10);
    s1.input_salary();
    Salary s2(s1);
    s1.show_salary();
     s2.show_salary();
    return 0;
}
时间: 2024-09-22 03:10:46

C++实践参考——人数不定的工资类的相关文章

C++第7周(春)项目6 人数不定的工资类

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目6-人数不定的工资类] 设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出. 提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用.Salary声明为指针类型的成员,通过动

C++实践参考:点-圆-圆柱类族的设计

[项目 - 点-圆-圆柱类族的设计] 按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试: (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试: (3)再以Circle类为直接基类,派生出一个Cylinder

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

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

《C语言及程序设计》实践参考——学生人数没个准

返回:贺老师课程教学链接 [项目1-学生人数没个准]输入学生成绩,输出高于平均成绩的学生序号和成绩.其中学生人数不定,可能10个,可能1000.在录入成绩之前,学生人数由键盘输入.由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来.考虑学生人数不定,用动态数组是个更适合的方案下面的程序结构供参考: #include<stdio.h> #include_________ //m?????.h int main() { int number; //学生人数

C++第6周项目6 - 有指针成员的工资类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8748730 [项目6]设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和这些职工的工资salary,要求输入职工工资并逐个输出.提示1:第4周项目5 数组作数据成员曾经处理过类似问题,但固定大小的数组,可能造成空间的浪费,也

第4周-任务4-设计工资类(Salary)

[题目]阅读教材P255例8.4,注意到类中的数据成员可以是数组.设计一个工资类(Salary),其中的数据成员有:double型数组salary[50](实际人数可以少于50,固定取50可能造成空间浪费),整型值number表示的职工人数.在main函数中调用你自己设计好的成员函数完成下面的功能:(1)输入职工工资,工资保存到salary数组中,实际人数保存到number中(输入-1标志着工资输入结束):(2)给每个人涨100元工资:(3)对涨后的工资进行排序:(4)输出排序后的工资. [题目

C++实践参考:数组作数据成员

[项目 - 数组作数据成员]下面是设计好的一个工资类(Salary): class Salary { public: void set_salarys( );//输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中: void add_salarys(int x); //给每个人涨x元工资 void sort_salarys(); //对工资由大到小排序 void show_salarys( ); //显示工资信息 private: double

第4周-任务4-设计工资类(Salary)-扩展1

原题目及解答见第4周-任务4-设计工资类(Salary): [拓展1]使用salary[50]有限制,实际人数少浪费空间,人数多时无法完成任务.程序执行中先输入职工人数,然后利用教材P217所讲的动态分配内存的运算符new,开辟一个大小正好的连续空间,完成上面的工作(排序需要采用指针完成). [参考解答] #include<iostream> using namespace std; class Salary { public: void input_salary(); void add_sa

《C语言及程序设计》实践参考——动态数组排序

返回:贺老师课程教学链接 [项目2-动态数组排序]编一个程序,输入某班某门课的成绩,进行排序后输出.成绩可能为小数.班级人数不定,要求采用动态数组完成.在下面代码基础上完成 #include<stdio.h> #include<malloc.h> int main() { int count, i,j; float *pf; scanf("%d", &count); //输入班级人数 //分配空间,用动态数组存储全班同学成绩 //输入同学们的成绩 //排