第9周项目3- 数不定的工资类(复制构造函数)
2016-05-29 11:27
197 查看
/*Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:c8weeks.cpp *作者:张天择 *完成日期:2016年 5月29日 *版本号:vc++6.0 */
【项目-人数不定的工资类】
设计一个工资类(Salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出。
提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用。将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据。
#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; }
注
复制构造函数
就类对象而言,相同类型的类对象是通过复制构造函数来完成整个复制过程的。
上例中的Test::Test(const Test& C),就是我们自定义的复制构造函数。
可见,复制构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const类型,用来约束作为参数的对象在构造新对象中是不能被改变的。
略一归纳:类X的复制构造函数的形式为X(X& x)。
当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,复制构造函数就会被自动调用。也就是说,当类的对象需要复制时,复制构造函数将会被调用。以下情况都会调用复制构造函数:
一个对象以值传递的方式传入函数体
一个对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化。
如果在类中没有显式地声明一个复制构造函数,那么,编译器将会自动生成一个默认的复制构造函数,该构造函数完成对象之间的浅复制,后面将进行说明。
自定义复制构造函数是一种良好的编程风格,它可以阻止编译器形成默认的复制构造函数,提高源码效率。
相关文章推荐
- 2016SDAU编程练习三1007
- JS高级技巧笔记
- VideoView播放视频异常MediaPlayer: Error (1,-2147483648)
- Java基本程序设计
- 1019-S专题三
- [sql2008错误问题] RegisteredServerException 异常
- redis事件
- 输出响应的数据给客户端并结束请求,继续执行后面的代码
- 1264 芳香数
- Java千百问_03基础语法(012)_transient关键字有什么用
- 通过自定义单元格渲染器在Jtable中显示超链接
- Leetcode - 14. Longest Common Prefix
- 集合类的简介
- Codeforces Round #326 (Div. 2)B. Duff in Love
- C++11智能指针
- display:table、box和width百分比来均分盒子的比较(2)
- HTML5之存储
- 第六届河南省程序设计大赛
- 使用Apache CXF开发Web Service步骤
- 第十四周项目 阅读程序 3