内蒙古科技大学面向对象程序设计实验10 多态(一)_第1页
内蒙古科技大学面向对象程序设计实验10 多态(一)_第2页
内蒙古科技大学面向对象程序设计实验10 多态(一)_第3页
内蒙古科技大学面向对象程序设计实验10 多态(一)_第4页
内蒙古科技大学面向对象程序设计实验10 多态(一)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内蒙古科技大学面向对象的程序设计实验报告课程名称:面向对象的程序设计姓名:陈伟光实验名称:多态(二)学号:1567159118任课教师:刘月峰专业:软件工程指导教师:刘月峰班级:15-软件一班一、实验目的1理解静态联编和动态联编的概念;2理解掌握成员函数方式运算符重载;3理解掌握友元函数方式运算符重载;4理解掌握+、-、=运算符的重载。二、实验环境编译器:Visual C+ 6.0.操作系统:Windows 7旗舰版三、实验内容2.1练习(一):1理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。#include iostream.hclass CComplexpublic:

2、CComplex() real = 0; imag = 0;CComplex(int x,int y) real = x; imag = y;int real;int imag;CComplex operator + (CComplex obj1)- CComplex obj2(real + obj1.real, imag + obj1.imag); return obj2;void main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; -cout obj.real endl;cout o

3、bj.imag endl;问题一:处的运算符重载,为什么该函数的返回值要设计成CComplex类型?问题二:处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?2理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。#include iostream.hclass CComplexpublic:CComplex() real = 0.0; imag = 0.0;CComplex(float x, float y) real = x; imag = y;CComplex operato

4、r + (CComplex &obj1, CComplex &obj2) CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag); return obj3;CComplex &operator+(CComplex &obj) obj.real += 1; obj.imag +=1; return obj;void print() coutreal+imagiendl;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -=

5、 1;return x;void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+, obj3=;obj3.print();+obj3;coutafter+, obj3=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();问题一:以上程

6、序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果。2.2练习(二):1把2.1中第一道题的程序改造成采取友元函数重载方式来实现“+”运算符,并采取友元函数重载方式增加前置和后置“+”以及“-”运算符重载,并设计主函数来验证重载运算符的用法。四、实验过程练习1题目提供代码与问题如下问题一:处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答因为该函数就是CComplex类重载+运算,两个CComplex相加后结果仍应该为CComplex类问题二:处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运

7、算符重载函数只设计了一个参数?答 因为+运算符被重载为成员函数,第一个参数由this指针隐含调用,所以再设置第二个参数即可原题目运行结果如下:练习 2题目提供源代码如下:试着编译结果如下:分析错因:此代码有三处错误错误1. +运算符重载为成员函数,两个参数应该删除一个,因为其中一个参数是由this指针隐含调用的错误2. 单目运算符+也是重载为成员函数,应该删除参数错误3.-运算符重载为友元函数,未在类中声明;修改之后代码如下:尝试运行结果如下:更改成功练习3根据题意编写代码如下:尝试运行结果如下:五、实验总结实验源代码:练习(一)#include iostream.hclass CComple

8、xpublic:CComplex()real = 0;imag = 0;CComplex(int x,int y)real = x;imag = y;int real;int imag;CComplex operator + (CComplex obj1)/-CComplex obj2(real + obj1.real, imag + obj1.imag);return obj2;void main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; /-cout obj.real endl;co

9、ut obj.imag endl;/*问题一:处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答因为该函数就是CComplex类重载+运算,两个CComplex相加后结果仍应该为CComplex类 问题二:处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答 因为+运算符被重载为成员函数,第一个参数由this指针隐含调用,所以再设置第二个参数即可*/练习(二)#include iostream.hclass CComplexpublic:CComplex()real = 0.0

10、;imag = 0.0;CComplex(float x, float y)real = x;imag = y;CComplex operator + (CComplex &obj2)/错误1.此处运算符重载为成员函数,一个参数由this指针隐含调用;CComplex obj3(real + obj2.real, imag + obj2.imag);return obj3;CComplex &operator+()/错误2.单目重载运算符+重载为成员函数,此处参数应删除;real += 1;imag += 1;return *this;void print()coutreal+imagiend

11、l;friend CComplex &operator-(CComplex &x);/错误3.-重载为友元函数,未在类中声明;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+,

12、 obj3=;obj3.print();+obj3;coutafter+, obj3=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();练习(三)#include iostream.hclass CComplexpublic:CComplex()real = 0.0;imag = 0.0;CComplex(float x, float y)real = x;imag = y;friend CComplex operator + (CComplex &ob

13、j1,CComplex &obj2)/友元函数重载+运算符CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);return obj3;friend CComplex &operator+(CComplex &obj)/友元函数重载+前缀运算符+obj.real;+obj.imag;return obj;friend CComplex &operator+(CComplex &obj,int)/友元函数重载后缀+运算符CComplex temp=obj;/temp使用obj未更改前的值obj.real+;obj.imag+;re

14、turn temp;friend CComplex operator-(CComplex &x);/友元函数重载-前缀运算符friend CComplex &operator-(CComplex &x,int);/友元函数重载后缀-运算符void print()coutreal+imagiendl;private:double real;double imag;CComplex operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;CComplex &operator-(CComplex &x,int)CComplex temp=x;/temp使用x未更改前的值x.real-;x.imag-;return temp;void main()CComplex C1(1,1),C2(2,2),C3;coutC1= ; C1.print();coutC2= ; C2.print();coutBefore nC3= ; C3.print();C3=C1+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论