燕山大学-面向对象程序设计实验-实验7 多态性:函数与运算符重载-实验报告
创始人
2025-05-30 15:06:16
0
CSDN的各位友友们你们好,今天千泽为大家带来的是
燕山大学-面向对象程序设计实验-实验5 派生与继承:单重派生-实验报告,
接下来让我们一起进入c++的神奇小世界吧,相信看完你也能写出自己的 实验报告!
本系列文章收录在专栏 燕山大学面向对象设计报告中 ,您可以在专栏中找到其他章节
如果对您有帮助的话希望能够得到您的支持和关注,我会持续更新的!

实验七 多态性—函数与运算符重载

💎7.1 实验目的

1.理解动态联编和动态联编的概念;

2.理解掌握成员函数方式运算符重载;

3.理解掌握友元函数方式运算符重载;

4.理解掌握++、--、=运算符的重载。

💎7.2 实验内容

7.2.1程序阅读

💎1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream"class CComplex{public: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 <

问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?

答:①处重载加法运算符,两个CComplex型数据相加后,仍然为CComplex型,相加不改变数据类型,故仍返回CComplex类型。

问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?

答:运算符重载是一个成员函数,本身就可以获取到自身,而自身就相当于obj1,故只需要再设计一个参数给obj2即可。

💎2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream"class CComplex{public:CComplex(){real = 0.0;imag = 0.0;}CComplex(float x, float y){real = x;imag = y;}CComplex operator + (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(){cout<

问题一:以上程序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果。

答:修改后代码如下

#include using namespace std;class CComplex{public:CComplex(){real = 0.0;imag = 0.0;}CComplex(float x, float y){real = x;imag = y;}CComplex operator + (CComplex &obj2){//重载加法运算符只需要额外加一个参数CComplex obj3(real + obj2.real,imag + obj2.imag);return obj3;}CComplex& operator++(){//重载++运算符括号里为空 real += 1;imag +=1;return *this;}CComplex& operator--(){//作为成员函数,放在类内real -= 1;imag -= 1;return *this;}void print(){cout<
分析:
初始状态,构造obj1=2.1+3.2i,obj2=3.6+2.5i,正常输出
运行obj3=obj1+obj2,重载+运算符,实部real和虚部imag分别相加,输出obj3=5.7+5.7i
运行++obj3,重载前置++运算符,实部real和虚部imag分别自增,输出obj3=6.7+6.7i
运行—obj3,重载前置—运算符,实部real和虚部imag分别自减,输出obj3=5.7+5.7i
运行obj4=++obj3,即先令++obj3,obj3=6.7+6.7i,随后令obj4=obj3=6.7+6.7i,正常输出obj4

💎7.2.2 程序设计

1.把7.2.1中第一道题的程序改造成采取友元函数重载方式来实现“+”运算符,并采取友元函数重载方式增加前置和后置“++”以及“--”运算符重载,并设计主函数来验证重载运算符的用法。

答:

#include using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;friend CComplex operator + (CComplex& obj1,CComplex& obj2);friend CComplex &operator++(CComplex &obj);friend CComplex &operator--(CComplex &obj);friend CComplex &operator++(CComplex &obj,int);friend CComplex &operator--(CComplex &obj,int);};CComplex operator + (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;}CComplex &operator--(CComplex &obj){obj.real -= 1;obj.imag -= 1;return obj;}CComplex &operator++(CComplex &obj,int){CComplex tmp=obj;obj.real += 1;obj.imag += 1;return tmp;}CComplex &operator--(CComplex &obj,int){CComplex tmp=obj;obj.real -= 1;obj.imag -= 1;return tmp;}int main(){CComplex obj1(2,3);CComplex obj2(3,2);cout<<"obj1="<

💎7.3思考题

1.定义CPoint类,有两个成员变量:横坐标(x)和纵坐标(y),对CPoint类重载“++”(自增运算符)、“--”(自减运算符),实现对坐标值的改变。(每个函数均采用友元禾成员函数实现)

答:

(友元函数实现)#includeusing namespace std;class CPoint{private:double x;double y;public:CPoint(double x,double y):x(x),y(y){}void print(){cout<<"坐标为("<

本篇文章就分享到这里啦,祝你学习进步!

相关内容

热门资讯

信捷PLC通过EtherCat... 信捷PLC支持ethercat通讯协议,可以和支持ethercat的从站通讯,像伺服驱动器或IO站点...
幼儿园教育随笔常规   在与幼儿相处的过程中,会遇到哪些情况呢?小编收集了幼儿园教育随笔常规,欢迎阅读。  幼儿园教育随...
亲爱的我想对你说心情随笔 亲爱的我想对你说心情随笔  亲爱的,我想此刻用一封信来告诉你我的感受,我的看法。我不知道你会不会看到...
描写秋天的落叶随笔美文 描写秋天的落叶随笔美文(通用57篇)  在现实的学习、工作中,大家或多或少都对随笔有些了解吧?随笔是...
八月十五月儿圆随笔 八月十五月儿圆随笔  在中国的农历里,一年分为四季,每季又分为孟、仲、季三个部分,因而中秋也称仲秋。...
【网络】网络层协议——IP 目录网络层IP协议IP基础知识IP地址IP报头格式网段划分CIDR特殊的IP地址IP地址的数量限制私...
$route.params是否... 通过与chatGpt不断的反问交流,终于获得了最终答案,回答如下...
大数据工程师需要学习哪些内容 大数据开发对于Java语言的依赖程度比较高,如果想尝试大数据开发,学习过...
浅谈知识蒸馏的现状与未来 注:本文由chatGPT生成,可能部分内容有所冗余或欠缺,...
小班教育随笔 - 小班教育随笔 -范文和孩子们相处的时间长了,也就有了感情,何况干幼教这一行最基本的就是要有爱心,要和...
心情的随笔 心情的随笔(通用84篇)  在学习和工作的日常里,应该很少人不知道随笔吧?随笔是散文的一种,可以不受...
幼师教育随笔 幼师教育随笔范文(通用21篇)  无论是身处学校还是步入社会,大家对随笔应该都不陌生吧?随笔可以观景...
【Android】之【Hand... 一、面试必问 1、Handler是什么 Handler是Android中的异步消息处理机制。当发送一...
【MySQL】007 -- 事...     此文章为《MySQL 实战 45 讲》的学习笔记,其课程链接可参见࿱...
美好中秋随笔 美好中秋随笔  对中秋的描写,有很多,有忧伤的思念、有团聚的喜悦、情感的缠绵、有月圆的美丽, 又到中...
教师教育教学随笔 教师教育教学随笔(精选10篇)  在学习和工作中,大家对随笔应该很熟悉吧?随笔通常指一种散文体裁,随...
旅游心情随笔 旅游心情随笔集锦15篇  在学习、工作生活中,大家一定都接触过随笔吧?随笔是过去社会较为流行的一种文...
音乐教师教育随笔   音乐是反映人类现实生活情感的一种艺术,是声音的艺术。 音乐是指有旋律、节奏或和声的人声或乐器音响...
Ubuntu连接不了网络的解决... 突然发现Ubuntu连不上网络,网络打问号或者右上角也没有网络图标;楼主...
阅读随笔 阅读随笔  阅读一些深刻的文字的时候,感觉就是对心灵进行一番洗礼。有的时候会很迷茫,很困惑,自己能否...