课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8690895
【项目5 - 数组作数据成员】阅读教材P255例8.4,注意到类中的数据成员可以是数组。设计一个工资类(Salary),其中的数据成员有:double型数组salary[50](实际人数可以少于50,固定取50可能造成空间浪费),整型值number表示的职工人数。在main函数中调用你自己设计好的成员函数完成下面的功能:
(1)输入职工工资,工资保存到salary数组中,实际人数保存到number中(输入-1标志着工资输入结束);
(2)给每个人涨100元工资;
(3)对涨后的工资进行排序;
(4)输出排序后的工资。
【项目5扩展1(选做)】使用salary[50]有限制,实际人数少浪费空间,人数多时无法完成任务。程序执行中先输入职工人数,然后利用教材P217所讲的动态分配内存的运算符new,开辟一个大小正好的连续空间,完成上面的工作。
扩展1参考解答:
#include <iostream> using namespace std; class Salary { public: void set_salarys( ); void add_salarys(int x); void sort_salarys(); void show_salarys( ); private: double *salarys; //工资,定义为指针,将来指向一个数组 int number; //实际人数 }; void Salary::set_salarys( ) { int x,i; cout<<"请输入职工人数: "; cin>>number; salarys=new double[number]; //分配大小正好合适的空间存放数据 cout<<"请输入职工的工资: "; for(i=0;i<number;++i) { cin>>x; salarys[i]=x; } } void Salary::add_salarys(int x) { int i; for (i=0;i<number;i++) salarys[i]+=x; } void Salary::sort_salarys() { int i,j; double t; for (i=0;i<number-1;i++) for(j=0;j<number-i-1;j++) if (salarys[j]<salarys[j+1]) { t=salarys[j]; salarys[j]=salarys[j+1]; salarys[j+1]=t; } } void Salary::show_salarys( ) { int i; for (i=0;i<number;i++) cout<<salarys[i]<<" "; } int main( ) { Salary s; s.set_salarys( ); s.add_salarys(100); s.sort_salarys(); s.show_salarys( ); system("PAUSE"); return 0; }
补充说明:这个程序看起来很不错,在空间利用上是如此节约。然而,用new动态分配过的空间应该要用delete回收的。在此处先不强调这一点,后面讲析构函数时再探讨存在着怎样的风险,并学习如何避免。