收藏 分享(赏)

CPP实训8qR.doc

上传人:scg750829 文档编号:7132017 上传时间:2019-05-06 格式:DOC 页数:15 大小:80.50KB
下载 相关 举报
CPP实训8qR.doc_第1页
第1页 / 共15页
CPP实训8qR.doc_第2页
第2页 / 共15页
CPP实训8qR.doc_第3页
第3页 / 共15页
CPP实训8qR.doc_第4页
第4页 / 共15页
CPP实训8qR.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、第 8 章 静态成员和友元实训静态成员和友元的提出方便了程序的编写,可以满足一些特殊的要求,例如允许函数直接读写其他对象的私有数据成员。本章的学习目的是通过做习题和上机实验,学会怎样定义和使用静态成员和友元。8.1 典型习题解答【例 8.1】 简述静态数据成员和普通数据成员的区别?【解答】类的普通数据成员相当于一个局部变量,只可以被该类的对象访问,而类的静态数据成员相当于一个全局变量,可以被任何实体访问;类中声明静态数据成员时并不能自动初始化这个变量,必须在类定义之外来初始化静态数据成员,而类声明普通数据成员时,可以由构造函数初始化这个变量。【例 8.2】 写出静态成员的定义格式。【解答】将一

2、个类的数据成员定义为静态的格式为:static 将一个类的成员函数定义为静态的格式为:static ()【例 8.3】 定义一个工资类 GZ,类包含一个保护数据成员 money 表示工资,一个静态数据成员 sds 表示个人所得税占工资的比率,一个静态成员函数 modSDS 更改 sds。【解答】class GZ public:static void modSDS(float newSDS);static float sds;GZ(float m);virtual GZ();protected:float money;【例 8.4】生成一个 GZ 类表示工资。用静态数据成员包含每个职工的 sds

3、(个人所得税占工资的比率) 。类的每个成员包含一个私有数据成员 money,表示当月工资。提供一个calSDS 成员函数,计算个人应交所得税,并从 money 中扣除。提供一个 static 成员函数modSDS,将 sds 设置为新值。实例化两个不同的 GZ 对象 people1 和 people2,工资分别为 1200.0 和 1500.0。将 sds设置为 1,计算两人实际应发的工资数并打印新的结果。然后将 sds 设置为 2,再次计算两人实际应发的工资数并打印新的结果。【解答】首先定义 GZ 类,class GZ public:static void modSDS(float newS

4、DS);void calSDS();static float sds;GZ(float m);protected:float money;其次,要定义类 GZ 的成员函数,在这里注意要将静态数据成员的定义放在类定义之外。GZ:GZ(float m) money = m;void GZ:calSDS() /计算并显示扣除个人所得税后的实际工资float mySDS = money * sds;cout()【例 8.6】生成一个 JX 类表示矩形,矩形的长和宽作为其两个数据成员。编写一个求矩形面积的函数 area(),并将它声明为 JX 的一个友元函数。实例化一个对象 jx1, 长和宽分别为 3

5、和 4。利用 area()求出该矩形的面积。【解答】首先定义 JX 类,并将 area()定义为其友元函数,class JX double a,b;public:JX(double x, double y) a = x;b = y;friend double area(JX ;定义函数 area(),double area(JX 按照要求实例化一个对象,计算其友元函数 area()计算矩形的面积,void main( ) /实例化 JX 类的一个对象JX jx1(3, 4);cout【例 8.8】生成一个名为 TO 的类,编写一个求两数之积的函数 ji(),一个求两数平均值的函数 junzhi

6、()。将 TO 类声明为矩形类 JX 的友元类。实例化 JX 类的一个对象 jx2,其长和宽为 4、6。利用 TO 类的成员函数求出这个矩形的面积,长和宽的平均值。【解答】定义 TO 类和 JX 类,并将 TO 类声明为 JX 类的友元类,class JX double a,b;public:JX(double x, double y) a = x;b = y;friend class TO; /将类 TO 声明为其友元类;class TO public:double junzhi(JX double ji(JX ;定义类 TO 的成员函数。double TO:ji(JX double TO:

7、junzhi(JX 按要求实例化 JX 类的一个对象,利用 TO 类的成员函数求出这个矩形的面积,长和宽的平均值。void main() JX jx(4,6);TO to=TO();cout= 0)cout 100000)SDS = (x-100000)*SDS9;x=100000;if (x 80000)SDS += (x-80000)*SDS8;x=80000;if (x 60000)SDS += (x-60000)*SDS7;x=60000;if (x 40000)SDS += (x-40000)*SDS6;x=40000;if (x 20000)SDS += (x-20000)*SDS

8、5;x=20000;if (x 5000)SDS += (x-5000)*SDS4;x=5000;if (x 2000)SDS += (x-2000)*SDS3;x=2000;if (x 500)SDS += (x-500)*SDS2;x=500;SDS += x*SDS1;cout 100000) /多于 100000 元部分的税率是 SDS9SDS = (x-100000)*SDS9;x=100000;if (x 80000) /小于 100000 元大于 80000 元部分的税率是 SDS8SDS += (x-80000)*SDS8;x=80000;if (x 60000) /小于 80

9、000 元大于 60000 元部分的税率是 SDS7SDS += (x-60000)*SDS7;x=60000;if (x 40000) /小于 60000 元大于 40000 元部分的税率是 SDS6SDS += (x-40000)*SDS6;x=40000;if (x 20000) /小于 40000 元大于 20000 元部分的税率是 SDS5SDS += (x-20000)*SDS5;x=20000;if (x 5000) /小于 20000 元大于 5000 元部分的税率是 SDS4SDS += (x-5000)*SDS4;x=5000;if (x 2000) /小于 5000 元大

10、于 2000 元部分的税率是 SDS3SDS += (x-2000)*SDS3;x=2000;if (x 500) /小于 2000 元大于 500 元部分的税率是 SDS2SDS += (x-500)*SDS2;x=500;SDS += x*SDS1; /小于 500 元部分的税率是 SDS1计算出的总纳税额是 SDS。8.3 运算符重载实训8.3.1 实训题目和要求生成一个表示复数的类 FS。复数的实部 sb 和虚部 xb 作为其数据成员。提供成员函数disp()显示复数,重载“” , “” , “*”, “/”为 FS 类的成员函数,用来计算两个复数的和、差、积、商。利用重载的运算符计算

11、下列各式:(8+3i)+ (7-4i);(9+3i) (4+2i);(4+6i) *(2+3i);(7+4i) / (2+1i)。实训要求: 重载运算符“” 。 重载运算符“” 。 重载运算符“*” 。 重载运算符“/” 。 实例化 FS 类的 8 个对象,并利用重载的运算符对其进行计算。8.3.2 实训参考步骤首先声明复数类 FS。class FS protected:double xb;double sb;public:FS operator * (FS FS operator / (FS FS operator - (FS FS operator + (FS void disp();FS

12、(double a=0, double b=0);FS(FS ;定义成员函数,并重载运算符“” 、 “” 、 “*”和“/” 。FS:FS(double a, double b) sb = a;xb = b;FS:FS(FS xb = f.xb;void FS:disp()cout= 0)cout“+“;coutxb“*i)“;FS FS:operator +(FS g.sb += f.sb;g.xb += f.xb;return g;FS FS:operator -(FS g.sb -= f.sb;g.xb -= f.xb;return g;FS FS:operator *(FS FS h;

13、h.sb = g.sb*f.sb - g.xb*f.xb;h.xb = g.sb*f.xb + g.xb*f.sb;return h;FS FS:operator /(FS FS h(f.sb, -1*f.xb);FS i = g * h; /利用已经被重载的运算符“*”来进行复数的乘法double m = f.sb*f.sb + f.xb*f.xb;g.xb = i.xb/m;g.sb = i.sb/m;return g;实例化八个对象,并利用所重载的运算符对其进行运算。void main()FS a1(8,3), b1(7,-4);FS a2(9,3), b2(4,2);FS a3(4,6

14、), b3(2,3);FS a4(7,4), b4(2,1);FS c1 = a1 + b1;a1.disp();cout“ + “;b1.disp();cout“ = “;c1.disp();coutendl;FS c2 = a2 - b2;a2.disp();cout“ - “;b2.disp();cout“ = “;c2.disp();coutendl;FS c3 = a3 *b3;a3.disp();cout“ * “;b3.disp();cout“ = “;c3.disp();coutendl;FS c4 = a4 / b4;a4.disp();cout“ / “;b4.disp();cout“ = “;c4.disp();coutendl;程序的执行结果如下:(8+3*i) + (7-4*i) = (15-1*i)(9+3*i) - (4+2*i) = (5+1*i)(4+6*i) * (2+3*i) = (-10+24*i)(7+4*i) / (2+1*i) = (3.6+0.2*i)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报