第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;。但是这个程序很简单,程序直接结束,占用的所有内存也就释放了,这个工作不做也无妨。

<全文完>

时间: 2024-10-25 06:31:23

第4周-任务4-设计工资类(Salary)-扩展1的相关文章

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

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

C++第5周项目1 - 设计三角形类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8723847 [项目1]设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 #include<iostream> using namespace std; class Triangle {public: double perimeter(void);

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 数组作数据成员曾经处理过类似问题,但固定大小的数组,可能造成空间的浪费,也

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

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

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

返回:贺老师课程教学链接 [项目-人数不定的工资类]设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出.提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用.将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据. class Salary { public: Salary(int n); //n为职工人

编程-设计一个类用来表达两张牌的牌组,设计这个类的初始化方式

问题描述 设计一个类用来表达两张牌的牌组,设计这个类的初始化方式 设计一个类表达一组牌,设计牌组的初始化方式 //牌值 private string face; //花色 private string suit; public zupai(string suit, string face) { this.face = face; this.suit = suit; } //牌子 public string getFace() { return face; } //花色 public string

软件工程之系统建模篇:设计系统类模型

类模型是面向对象分析的核心,系统类模型用包图描述,前面的文章我们分析 了实体类.接口类.接口控制类和用例控制类,本章我们将介绍系统类模型的设 计,首先简要介绍类模型的设计方法,然后设计子系统的类模型,最后设计系统 类模型. 1.设计方法 设计系统类模型,要明确子系统或系统的组成,及各个组成部分之间的关系, 子系统的划分和前面介绍过的接口类包的划分相同,主要包括:发文办理.收文 办理.会议管理.档案管理.公告管理.个人助理.系统管理.用户登录8个子系 统,无论是子系统模型还是系统类模型,都包含接口

软件工程之系统建模篇:设计接口类模型

本文介绍接口类模型的设计过程.接口类模型描述系统活动者与系统交互的界 面,接口类位于系统结构的表示服务层,接口类模型用类图和包图描述.首先简 要介绍接口类模型的设计方法,然后设计子系统的类图,最后设计系统及子系统 的包图. 1.设计方法 设计接口类模型,首先要识别出接口类,再识别出接口类之间的关系.接口类 是应用程序的"可视区",也是系统与外界的隔离层.接口类可以用 用例去识别,用例驱动接口类设计.用户接口直接与用例相连,用户是通过用户 接口发起和终止用例的.由于用户接口直接面向用户,

java-JAVA如何设计实体类????

问题描述 JAVA如何设计实体类???? 场景: 1. 前台要显示一张表格,表格中的栏位对应于数据库中A,B表的数据A与B是一对多的关系. 问题: 1. 我从网上看到JAVA设计实体类一般都是一个实体类对应一张表,可是我要通过A,B表连接查询.这个实体类又该如何设计? 我是刚刚学习JAVA的菜鸟,求大神解惑! 解决方案 设计两个类A,B,一对多关系通过组合实现. 示例代码,B表关联多个A表记录: public class A{ } public class B{ List<A> list; }