天天看点

《C++语言基础》实践项目——深复制、友元、模板

【项目1-深复制体验】

(1)阅读下面的程序,补足未完成的注释

(2)将注释(a)所在的那一行去掉,会出现什么现象?为什么?为什么a数据成员所占用的存储空间要在aa长度基础上加1?若指针a不是指向字符(即不作为字符串的地址),是否有必要加1?

(3)为类a增加复制构造函数,用下面的main函数测试

【项目2-我的数组类】

下面的程序,因为存在指针类型的数据成员,需要能完成深复制的构造函数。请补充完整构造函数和析构函数(其他不必动)。其中,构造函数要完成下面三个任务:

(1)为各成员函数赋值,按照深复制原则,其中arrayaddr应该是为保存数据新分配的连续空间的首地址;

(2)myarray(int *a, int n)中,要将a指向的数组中的数值,逐个地复制到新分配的arrayaddr指向的空间中;

(3)getmax( )函数采取的策略是直接返回max(所以,计算max的工作,由构造函数完成)

【项目3-人数不定的工资类】

设计一个工资类(salary),其中的数据成员包括职工人数(number,人数不定)和number个职工的工资salary,要求输入职工工资并逐个输出。

提示:用固定大小的数组存储number个职工的工资,可能造成空间的浪费,也可能会由于空间不够而不能处理职工人数过多的应用。将salary声明为指针类型的成员,通过动态分配空间,分配正好大小的空间存储数据。

【项目4-成员函数、友元函数和一般函数有区别】

(1)阅读下面的程序,体会注释中的说明。

(2)模仿上面的示例,完成求点类中距离的任务。你需要实现求距离函数的三种版本:分别利用成员函数、友元函数和一般函数求两点间距离的函数,并设计main()函数完成测试。

提示:此项目和例子的区别在于“距离是一个点和另外一个点的距离”,不同版本在参数上有体现。三个版本建议分开测试,也可以如示例,放在一个程序中完成。

下面是点类的部分代码。

【项目5-友元类】

定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个datetime,日期、时间都处理更好)

【项目6-复数模板类】

    阅读教材例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计complex,使实部和虚部的类型为定义对象时指定的实际类型。

    (1)要求类成员函数在类外定义。

    (2)在此基础上,再实现减法、乘法和除法

    你可以使用的main()函数如下。

    (3)友元函数提供了一种非成员函数访问私有数据成员的途径,模板类使类中的数据成员的类型变得灵活,这两种技术可以结合起来用。要求在前面方案的基础上支持用友员函数实现的加法。用于测试的main()函数如下:

继续阅读