本文主要是介绍第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_salary(); void order_salary(); void show_salary();
private: double *salary; int number; }; int main()
{ Salary sal1; sal1.input_salary(); sal1.add_salary(); sal1.order_salary(); cout << "增加工资且排序后的工资是:" << endl; sal1.show_salary(); system("pause");return 0;
} void Salary::input_salary()
{ int i; cout << "职员的人数是:" ; cin >> number; salary = new double[number]; //这是最为关键的一句,根据职工人数,确定分配空间的大小cout << "请输入职工工资:" << endl; for(i = 0; i < number; ++i) { cin >> *(salary+i); } return ;
} void Salary::add_salary()
{ for(int i = 0; i < number; ++i) { *(salary+i) = *(salary+i) + 100; }
} void Salary::order_salary()//排序
{ int i, j;double t; for(i = 0; i < number; ++i) { for(j = 0; j < number - i - 1; ++j) { if(*(salary + j) < *(salary + j + 1)) { t = *(salary + j); *(salary + j) = *(salary + j + 1); *(salary + j + 1) = t; } } } return ;
} void Salary::show_salary()
{ for(int i = 0; i < number; ++i) { cout << *(salary+i) << endl; } return ;
}
【讨论】此程序的关键是第34行,在获得实际人数后,分配大小合适的数组存放数据。指向double的指针salary实际上充当了指向这个一维数组首地址的角色。
【未尽事项】由于使用了动态内存分配,在程序退出前应该用delete操作符释放salary指向的空间。合理的做法应该是为Salary类写一个析构函数,在其中写delete[ ] salary;。但是这个程序很简单,程序直接结束,占用的所有内存也就释放了,这个工作不做也无妨。
<全文完>
这篇关于第4周-任务4-设计工资类(Salary)-扩展1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!