实验二 运算符重载
运算符重载实验报告

运算符重载实验报告运算符重载实验报告引言:运算符重载是C++语言中的一项重要特性,它允许用户自定义运算符的行为。
通过运算符重载,可以使得程序更加直观、简洁,并提高代码的可读性和可维护性。
本实验旨在探索运算符重载的用法和效果。
一、实验目的本实验旨在通过实际操作,深入了解运算符重载的机制和使用方法,以及运算符重载对程序设计的影响。
二、实验环境本实验使用C++编程语言,并在Visual Studio开发环境下进行实验。
三、实验过程1. 了解运算符重载的基本概念运算符重载是指通过定义函数,改变运算符的行为。
在C++中,可以通过重载运算符函数来实现运算符的重载。
运算符重载函数的命名规则为"operator 运算符",例如"operator+"表示重载加法运算符。
2. 实现运算符重载的实验示例为了更好地理解运算符重载的使用方法,我们以矩阵的加法为例进行实验。
首先,定义一个Matrix类,并重载"+"运算符。
```cppclass Matrix {private:int** data;int rows;int cols;public:Matrix(int rows, int cols) {this->rows = rows;this->cols = cols;data = new int*[rows];for (int i = 0; i < rows; ++i) {data[i] = new int[cols];}}Matrix operator+(const Matrix& other) {Matrix result(rows, cols);for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {result.data[i][j] = data[i][j] + other.data[i][j]; }}return result;}};```在上述代码中,我们定义了一个Matrix类,其中包含矩阵的数据成员data、行数rows和列数cols。
【免费下载】第8章 运算符重载

complex(double re=0.0,double im=0.0,char ch1='U' ); complex operator+(complex& c);//声明重载加法操作 void show(); private: double real,imag; char ch; }; complex::complex(double re,double im,char ch1 ) { real=re;imag=im;ch=ch1; cout<<"constructor is called!"<<endl; } complex complex::operator+(complex& c)
{ //定义重载加法操作,扩充加法操作的语义 double x,y; if(ch==c.ch){ x=real+c.real;y=imag+c.imag; return complex(x,y,ch); } else cout<<"can't execute the plus opetating!"<<endl; return complex(0,0,'U');
1
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配,料置不试技仅卷术可要是以求指解,机决对组吊电在顶气进层设行配备继置进电不行保规空护范载高与中带资负料荷试下卷高总问中体题资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,.卷编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试5写交卷、重底保电要。护气设管装设备线置备4高敷动调、中设作试电资技,高气料术并中课3试中且资件、卷包拒料中管试含绝试调路验线动卷试敷方槽作技设案、,术技以管来术及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
运算符重载和类模板实验报告

洛阳理工学院实验报告
系别
计算机与信息工程系
班级
B110
学号
B11050
姓名
课程名称
C++面向对象程序设计
实验日期
2013.11.5
实验名称
运算符重载和类模板
template<typename T>
T max(T a,T b,T c)
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int i1=1,i2=2,i3=3,i;
double d1=3.2,d2=6.3,d3=4.8,d;
long l1=35463,l2=21345,l3=12345,l;
成绩
实验目的:
1、掌握C++中运算符重载的机制和运算符重载的方式;
2、掌握类型转换的方式、内存的动态分配;
3、掌握类模板的定义,掌握类模板的实例化。
实验条件:
装有Microsoft Visual C++6.0软件的计算机
实验内容:类名∷operator单目运算符( ))
};
int main()
{Compare <int> cmp1(3,7);
cout<<cmp1.max()<<endl;
cout<<cmp1.min()<<endl;
Compare <float> cmp2(3.1f,7.2f);
运算符重载实验模板

高级程序设计语言C++实验报告学号:姓名:日期:实验运算符重载1.实验目的1)进一步了解运算符重载的概念和使用方法。
2)掌握几种常用的运算符重载的方法。
3)了解转换构造函数的使用方法。
4)了解在Visual C++6.0环境下进行运算符重载要注意的问题。
2.实验内容和步骤1)定义一个复数类Complex,重载运算符“+”和“-”,使之能用于复数的加和减,分别求两个复数的和和差。
要求“+”运算符重载函数作为友元函数,“-”运算符重载作为成员函数。
源程序:运行结果2)定义一个复数类Complex,重载运算符“+”使之能够完成复数的加法运算,参加运算的两个运算量可以都是类对象,也可以其中一个是整数,顺序任意(即c1+i,和i+c1都能实现,这里c1是复数类对象,i是整数)。
编程序,分别求两个复数之和、整数和复数之和,满足交换律。
源程序:运行结果3)编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。
定义Complex(复数)类,在成员函数中包含重载类型转换运算符:operator double( ) {return real;}源程序:运行结果4) 定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。
编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。
可以设想为:一位学生大学毕业留校担任老师,他原有的部分数据仍然是有用的,应当保留。
源程序:运行结果3.实验中遇到的问题及解决方法。
运算符重载

1、多态性的基本概念2、派生类对象替换基类对象3、虚函数的定义4、抽象类的定义5、宠物类的设计6、运算符重载7、日期类对象判断大小8、分数类对象运算符重载☐运算符重载指赋予运算符新的操作功能,主要用于对类的对象的操作☐运算符+意味着多少对象类型的加法呢?☐还可以定义新的对象类型加法☐运算符重载定义形式:<类型><类名>::operator<操作符>(<参数表>){函数体}☐首先定义虚数类☐虚数可以描述为:a+bi☐a与b看成实数,定义成double类型☐成员函数除了构造与析构外,还有:☐输出虚数、修改虚数、得到实部a、得到虚部b ☐相加+、判相等==#include <iostream>using namespace std;class Complex{private:double real, imag;public:Complex(double r = 0, double i = 0): real(r), imag(i){ }double Real(){return real;}double Imag(){return imag;}Complex operator +(Complex&);Complex operator +(double);bool operator ==(Complex);~Complex(){ };Complex Complex::operator +(Complex &c)// 重载运算符+,两边是虚数对象{Complex temp;temp.real = real+c.real;temp.imag = imag+c.imag;return temp;}Complex Complex::operator +(double d)// 重载运算符+,左边是虚数对象,右边是双精度数{Complex temp;temp.real = real+d;temp.imag=imag;return temp;}bool Complex::operator ==(Complex c)// 重载运算符=={if (real == c.real && imag == c.imag)return true;elseint main(){Complex c1(3,4),c2(5,6),c3;cout << "C1 = " << c1.Real() << "+j" << c1.Imag() << endl;cout << "C2 = " << c2.Real() << "+j" << c2.Imag() << endl;c3 = c1+c2;cout << "C3 = " << c3.Real() << "+j" << c3.Imag() << endl;c3 = c3+6.5;cout << "C3 + 6.5 = " << c3.Real() << "+j" << c3.Imag() << endl;if ( c1==c2 )cout<<“两个复数相等”;elsecout<<“两个复数不相等”;return 0;☐运算符++分前置运算符和后置运算符☐例如: ++Y与Y++☐前置运算符定义Complex Complex::operator ++ () {real+=1;return *this;}☐后置运算符定义Complex Complex::operator ++ (int) {real+=1;return *this;}。
运算符重载优秀课件

定义一种简化旳复数类complex: class complex { public: double real,imag; complex(double r=0,double i=0) { real=r; imag=i;}
}; 若要把类complex旳两个对象com1和com2加在一起,下面旳语句
是不能实现旳: main() { complex com1(1.1,2.2),com2(3.3,4.4),total; total=com1+com2; //错误 //… return 0; }
第7章 运算符重载
7.1为何引入运算符重载
int sum_i; float sum_f; int i1=123, i2=456; float f1=3.45, f2=56.78; sum_i= i1+i2;//两个整数相加 cout<<"i1+i2 ="<< sum_i; sum_f= f1+f2; //两个浮点数相加 cout<<"f1+f2 ="<< sum_f; sum_f= i1+i2+f1; //进行类型转换后相加 cout<<"i1+i2+f1 ="<<sum_f;
. .* :: ?Sizeof() ?:不能重载
(3)运算符重载后,不能变化运算符操作数旳
个数、优先级、结合性、语法构造。
(4)不能定义新旳运算符
7.3.1 单目运算符“++”和“--”旳重载 在C++中,能够经过在运算符函数参数表中是否插 入关键字int来区别前缀和后缀这两种方式。 例如:重载单目运算符++
[C++]运算符重载实验报告
![[C++]运算符重载实验报告](https://img.taocdn.com/s3/m/29d7be84bb68a98271fefabf.png)
+operator+(const COMPLEX &other): COMPLEX+operator-(const COMPLEX &other) : COMPLEX+operator-(): COMPLEX+operator=(const COMPLEX &other) : COMPLEX运行结果2. 程序的类结构图为:Tx,y:int+T(int a,int b)+&operator<<(ostream &os,T &a):friend ostream运行结果3. 程序的类结构图为:Shape+Area():virtual double const+PrintShapeName():virtual void const +Print():virtual void constPointx,y:int+Point(int=0,int=0)+SetPoint(int a,int b):void+GetX():int const+GetY():int const+PointShapeName():virtual void const +Print():virtual void constCircleradius:double+Circle(int x=0,int y=0,double r=0.0) +SetRadius(double r):void+GetRadius():double const+Area():virtual double const+Print():virtual void const+PrintShapeName():virtual void const 运行结果{cout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果【实例编程】运行结果。
运算符重载实验报告

一、实验目的1. 理解运算符重载的概念和原理。
2. 掌握C++中运算符重载的方法和规则。
3. 通过实例,实现自定义类型对运算符的重载。
4. 分析运算符重载在实际编程中的应用和优势。
二、实验环境1. 编程语言:C++2. 开发环境:Visual Studio 20193. 操作系统:Windows 10三、实验内容1. 运算符重载的概念和原理2. 运算符重载的方法和规则3. 自定义类型运算符重载实例4. 运算符重载的实际应用四、实验步骤1. 概念和原理运算符重载是指为已有的运算符赋予新的功能,使其能够应用于自定义类型的数据。
在C++中,运算符重载可以通过成员函数或友元函数实现。
2. 方法和规则- 成员函数重载:在自定义类型中定义一个成员函数,该函数的名称与要重载的运算符相同。
- 友元函数重载:在自定义类型外部定义一个友元函数,该函数的名称与要重载的运算符相同,并在函数声明中添加类名和作用域解析运算符。
运算符重载规则:- 运算符重载的函数必须返回与操作数相同的类型。
- 运算符重载的函数不能改变原有运算符的操作数个数。
- 运算符重载的函数不能改变原有运算符的优先级。
- 运算符重载的函数不能改变原有运算符的结合性。
3. 自定义类型运算符重载实例假设我们有一个自定义类型`Point`,表示二维平面上的一个点,其坐标为`(x, y)`。
```cppclass Point {public:int x, y;Point(int x, int y) : x(x), y(y) {}// 成员函数重载加法运算符Point operator+(const Point& p) const {return Point(x + p.x, y + p.y);}// 友元函数重载加法运算符friend Point operator-(const Point& p1, const Point& p2);};// 实现友元函数重载减法运算符Point operator-(const Point& p1, const Point& p2) {return Point(p1.x - p2.x, p1.y - p2.y);}```4. 运算符重载的实际应用运算符重载在实际编程中具有以下优势:- 提高代码可读性:使用自定义类型时,可以像操作基本数据类型一样使用运算符,提高代码的可读性。
运算符重载实验

运算符重载的应用【实验目的】1、理解重载运算符的意义。
2、掌握用成员函数、友元函数重载运算符的特点。
3、掌握重载运算符函数的调用方法。
【实验内容】1.定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。
编写一个完整的程序,测试重载运算符的正确性。
要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
⑴分析两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac–bd )+(ad+bc) i两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i复数类及运算符重载函数可定义为:2.根据下面描述定义完整的日期类:class Date{//成员变量void IneDay();//日期增加1天int DayCalc()const;//距基准日期的天数static const int day[];//每月的天数public:Date(int y,int m,int d);Date(int m, int d);Date();void SystmDate();//读取系统当前时间void SetDate(int yy,int mm,int dd);//设置日期void SetDate(int mm,int dd);bool IsLeapYear(int yy) const;//是否闰年bool IsEndofMonth()const ;//是否月末//重载cout<<,cout>>完成读入和输出日期工作//重载+,+=,-,-=,++,--,等运算符,完成日期的运算符操作。
//成员函数:判读一个日期是否是系统的当前日期//实现从键盘读入你的生日,如果是则显示:生日快乐,否则先生还有多少天到生日,或你的生日已经过了多少天,明年生日要再等多少天。
选作,实现:在文件中读入事先写入的亲朋好友的纪念日,系统到时自动提醒。
C++程序设计运算符重载实验报告

二、实验内容与设计(主要内容,操作步骤、算法描述或程序代码)
本次实验主要实现以下内容:
【项目内容】
定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”“++”“--”“>”“<”,使之能用于复数的加、减、乘、除、自增、自减、比较大小。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积、商、自增、自减、比较大小。 提示:注意复数的乘、除法计算。
//重载*
Complexoperator*(Complex a,Complex b){
Complex t;
t.r=a.r*b.r-a.i*b.i;
t.i=b.r*b.i+b.i*b.r;
returnt;
}
//重载/
Complexoperator/(Complex a,Complex b) {
Complex t;
专业:计算机科学与技术年级班级:13计科
学生姓名:侯瑄学号:222013321210092
实验教师:陈睿
计算机与信息科学学院软件学院
实验项目名称
C++程序设计运算符重载
实验时间
2015.10.25
实验类型
□验证性□设计性□综合性
一、实验目的和要求
(1)掌握通过运算符重载实现多态性的方法;
(2)学会运算符重载的成员函数法和友元函数法;
cout<<r;
if(i>0) cout<<"+";
if(i!=0) cout<<i<<"i"<<endl;
运算符重载实验报告参考模板

《面向对象程序设计》课程设计报告专业软件工程班级姓名学号指导教师起止时间2011.2~2011.4课程设计课题之一:运算符重载一、任务描述1.掌握运算符重载的定义;2.掌握重载运算符的方法。
二、问题分析1、设计基础:,设计一个可进行复数运算的演示程序2、分析设计课题的要求,要求编程实现以下功能:实现复数的加减法三、数据结构设计1,定义类,设计构造函数和显示函数print();2,重载运算符“+”、“-”为类FS的成员函数。
3,实例化FS类的2个对象,并利用重载的运算符对其进行计算四、功能设计#include<iostream.h>class complex//复数类声明{private:double real;double image;public:complex(double r=0.0,double i=0.0)//构造函数{real=r;image=i;complex operator+(complex c2);//+重载为成员函数complex operator-(complex c2);//-重载为成员函数void display();};complex complex::operator +(complex c2)//重载的实现{complex c;c.real=c2.real+real;c.image=c2.image+image;return complex(c.real,c.image);}complex complex::operator -(complex c2)//重载的实现{complex c;c.real=real-c2.real;c.image=image-c2.image;return complex(c.real,c.image);}void complex::display(){cout<<"("<<real<<","<<image<<")"<<endl;void main(){complex c1(5,4),c2(2,10),c3;cout<<"c1=";c1.display();cout<<"c2=";c2.display();c3=c1+c2;//使用重载运算符完成复数加法cout<<"c3=c1+c2=";c3.display();c3=c1-c2;//使用重载运算符完成复数减法cout<<"c3=c1-c2=";c3.display();}五、程序运行结果六、体会与收获通过这次实验我进一步了解运算符重载的概念和使用方法,掌握几种常用的运算符重载的方法,学会了使用重载运算符进行复数的加减法。
南华大学C++实验二运算符重载

南华大学计算机科学与技术学院实验报告(2015 ~2016 学年度第1 学期)课程名称高级语言程序设计II 实验名称运算符重载姓名刘让洲学号20144350101专业软件工程班级01班地点9-120 教师陈星1.实验目的及要求掌握 C++中运算符重载的机制和运算符重载的方式。
硬件要求:Pentium计算机软件要求:Windows操作系统、Code:Block 13.122.实验步骤(1)进入Code:Block 13.12集成开发平台。
(2)在实验1 程序基础上的Birthday 类中重载运算符<<实现生日对象的输出。
(3)Birthday 类中重载运算符- 实现两个生日生日对象的相减。
(4)Birthday 类中重载运算符= =实现两个生日对象相等的判断(5)编写main函数测试各个运算符。
3.实验内容源程序:#include <iostream>using namespace std;class Birthday //定义Birthday类{private: //Birthday类的三个私有数据成员 int year;int month;int day;public:Birthday(int y,int m,int d) //Birthday类的有参构造函数{year=y;month=m;day=d;}//把私有数据进行封装int getYear(){return year;}int getMonth(){return month;}int getDay(){return day;}//运算符<<重载声明为友元函数,进行友元重载 friend ostream &operator<<(ostream &out, Birthday&b);Birthday operator-(Birthday &b); //运算符-和==重载声明Birthday operator==(Birthday &b);};//运算符<<重载的具体实现ostream &operator<<(ostream &out, Birthday&b){cout<<"出生年月为:";out<<b.year<<"年"<<b.month<<"月"<<b.day<<"日";return out;}//运算符-重载的具体实现Birthday Birthday:: operator-(Birthday &b){Birthday temp(0,0,0);temp.year=this->year-b.year;temp.month=this->month-b.month;temp.day=this->day-b.day;return temp;}//运算符==重载的具体实现Birthday Birthday::operator==(Birthday &b){if(this->year==b.year && this->month==b.month && this->day==b.day) {cout<<"出生年月日相等"<<endl;}else{cout<<"出生年月日不相等"<<endl;}}int main(){Birthday c(1995,6,3); //实例化c,d,e三个Birthday对象Birthday d(1997,10,23);Birthday e(0,0,0);e=d-c; //e用来接收两个生日对象-的结果cout<<c<<endl; //<<运算符重载输出cout<<"相隔"<<e.getYear()<<"年"<<e.getMonth()<<"个月"<<e.getDay()<<"天"<<endl;//-重载输出c==d; //==重载输出return 0;}4. 实验结果5.实验总结分析本次实验通过对运算符《、—、==的重载,掌握了C++中运算符重载的机制和运算符重载的方式。
2.运算符重载

实验十三运算符重载实验名称:运算符重载学时安排:2实验类别:设计性实验实验要求:1人1组一、实验目的和任务熟练掌握运算符重载的设计方法二、实验原理介绍设计性实验。
根据要求正确定义、实现运算符重载函数。
三、实验设备介绍软件需求: Visual C++ 6.0或VS2008硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB 以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容和步骤1.实验要求:重载Timer类的+、-、>、==、<运算符,并实现验证代码。
1)+运算符要求实现:两个时间相加:如4:20:30 + 8:10:40 (结果为12:40:10)某个时间加上一定的分钟数:如4:20:30 + 40(分钟)(结果为5:00:30)2)-运算符要求实现:求两个时间相减:如8:10:40 - 4:20:30 (结果为3:50:10)注:结果可为负数。
3)>、= =、< 运算符要求实现比较两个时间的大小关系。
如8:10:40 > 4:20:30 (结果为真)【选做】以下功能可选做,函数请自行定义,可参考书上关于complex类++,--运算符的实现。
1)重载--运算符实现原时间减去1秒,如 t1--;2)要求调用--运算符实现倒计时功能。
如倒计时00:05:00,逐次减1s直到00:00:00提示时间到。
2.文件Timer.h参考class Timer{private:int hour;int minute;int second;public:Timer(int h, int m, int s);void ShowTime();Timer operator+ (const Timer &obj);Timer operator + (int minutes);Timer operator - (const Timer &obj);bool operator > (const Timer &obj);bool operator < (const Timer &obj);bool operator ==(const Timer &obj); };。
运算符重载—C++课程实验报告

using namespace std; class AB
{
public:
AB(int xx, int yy); void ShowAB(); AB& operator ++(); AB operator ++(int);
AB& operator --();
AB operator --(int);
通过这次实验我基本掌握了通过运算符重载实现多态性的方法学会了运算符重载的成员函数法和友元函数法基本能够区分单目运算符的前置与后置
C++
学生姓
名
xxx
班级
学号
xxxxxxxxx
实验项
目
实验四运算符重载
指导教师
杜之波
实验目
的和要
求
一、实验目的
(1)掌握通过运算符重载实现多态性的方法;
(2)学会运算符重载的成员函数法和友元函数法;
运算后,
A的值为:"
什+AA).ShowAB();
coutvv"
B
的值为:";
(++BB).ShowAB();
cout<v"B=A--运算后,A的值为:";
(--AA).ShowAB();
coutvv"B的值为:";
(BB--).ShowAB();
cout<<"B=--A运算后,A的值为:";
(--AA).ShowAB();
{
AB AA(0,0);
AB BB(0,0);
cout<v"A的值为:";
C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

C++学习之路—运算符重载(⼆)运算符重载作为类的成员函数和友元函数对运算符重载的函数有两种处理⽅式:(1)把运算符重载的函数作为类的成员函数;(2)运算符重载的函数不是类的成员函数,在类中把它声明为友元函数。
1 把运算符重载函数作为类的成员函数例1:为了便于说明问题,将重载函数的定义重写如下:1: Complex Complex :: operator + ( Complex& c2 )2: {3: Complex c ;4: c.real = real + c2.real ;5: c.imag = imag + c2.imag ;6:return c ;7: }有⼈可能会提出这样的疑问:“+”是双⽬运算符,为什么重载函数只有⼀个参数呢?实际上,运算符重载函数应当有两个参数,但是,由于重载函数是Complex类中的成员函数,因此有⼀个参数是隐含的,运算符函数是⽤this指针隐式的访问类对象的成员。
可以看到operator+访问了两个对象中的成员,⼀个是this指针指向的对象中的成员,⼀个是形参对象中的成员。
2 把运算符重载函数作为类的友元函数运算符重载函数除了可以作为类的成员函数外,还可以是⾮成员函数。
在有关的类中把它声明为友元函数,即友元运算符重载函数。
例2:将运算符+重载为适⽤于复数加法,重载函数不作为成员函数,⽽放在类外,作为Complex类的友元函数。
1:class Complex2: {3:public:4: ...5:friend Complex operator + ( Complex& c1 , Complex& c2 ) ; //重载函数作为友元函数6:private:7:double real ;8:double imag ;9: };10:11: Complex operator + ( Complex& c1 , Complex& c2 ) //定义运算符+重载函数12: {13: Complex c ;14: c.real = c1.real + c2.real ;15: c.imag = c1.imag + c2.imag ;16:return c ;17: }这个程序和把运算符重载函数作为类的成员函数相⽐,只做了⼀处改动,就是将运算符重载函数作为类外的普通函数,并在Complex类中声明它为友元函数。
运算符重载-- 实验报告

南昌航空大学实验报告2011年12月1号课程名称:面向对象程序设计B 实验名称:运算符重载班级:姓名:同组人:无指导教师评定: 签名:一、实验目的理解运算符重载(非成员形式和成员形式)、学习重载几类运算符(++,=,!=,+,-,==等)。
二、实验内容应用VC++6.0的构建一个复数类Complex,试对下列几个运算符进行重载:++,=,!=,+,-,==,其中要求要有成员重载形式和友元重载形式,而且,++运算符要求实现先加和后加两种形式。
三、概要设计函数原型:class complex{private:double real;double image;public:complex(double r=0,double i=0);complex &operator+(complex &c);complex operator-(complex &c);complex operator*(complex &c);friend complex operator/(complex &c1,complex &c2);friend bool operator==(complex &c1,complex &c2);friend bool operator!=(complex &c1,complex &c2);complex operator++();complex operator++(int);void show();};四、详细设计重载运算符 + 的函数:complex &complex::operator+(complex &c){complex temp;temp.real=real+c.real;temp.image=image+c.image;return temp;}重载运算符 - 的函数:complex complex::operator-(complex &c){complex temp;temp.real=real-c.real;temp.image=image-c.image;return temp;}重载运算符 * 的函数:complex complex::operator*(complex &c){complex temp;temp.real=real*c.real;temp.image=image*c.image;return temp;}重载运算符 / 的函数:complex operator/(complex &c1,complex &c2){complex temp;double t;t=1/(c2.real*c2.real+c1.image*c1.image);temp.real=(c1.real*c2.real+c1.image*c2.image)*t;temp.image=(c2.real*c1.image-c1.real*c2.image)*t;return temp;}重载运算符 == 的函数:bool operator==(complex &c1,complex &c2){if(c1.real==c2.real&&c1.image==c2.image)return true;elsereturn false;重载运算符 != 的函数:bool operator!=(complex &c1,complex &c2){if(c1.real!=c2.real||c1.image!=c2.image) return true;elsereturn false;}重载运算符 ++ 的函数:complex complex::operator++(){++real;++image;return *this;}complex complex::operator++(int){real++;image++;return *this;}五、程序调试经调试无误后,运行的结果为:六、实验总结通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。
运算符重载实验报告

RMB::RMB(unsigned int d, unsigned int c)
{
yuan = d;
jf = c;
while ( jf >=100 ){ //以使构造时,确保角分值小于100
yuan ++;
jf -= 100;
}
}
RMB operator+(RMB& s1, RMB& s2) // 此处改为RMB& operator+(RMB& s1, RMB& s2)
private:
unsigned int yuan; //元
unsigned int jf; //角分
};
RMB RMB::interest(double rate)
{
return RMB((yuan + jf / 100.0) * rate);
}
RMB RMB::add(RMB d)
{
return RMB(yuan + d.yuan + jf / 100.0 + d.jf / 100.0);
expense2(x,yrate).display();
}
3.实验结果:
(二)实验题目二:
(2) 将以下程序中重载运算符定义函数的返回类型更改(值返回更改为引用返回,引用
返回更改为值返回),观察程序运行结果,说明原因。
#include<iostream.h>
class RMB{
public:
RMB(unsigned int d, unsigned int c);
学 号:
指导教师:
2013年11月18日
运算符重载设计

{ int a[3][3]={1,2,3,4,5,6,7,8,9};
int b[3][3]={1,2,3, 0,1,2, -1,0,1};
Matrixx(a), y(b);
cout<<"-------- x= ------------"<<endl;
x.display(); //按设定格式显示出第一个矩阵x
for(i=0; i<rows*cols; i++)
*(tempM.m+i)=*(m+i)+*(M.m+i);
return tempM;
}
Matrix Matrix::operator-(Matrix &M)
{
int i;
Matrix tempM(rows,cols);
for(i=0;i<rows*cols;i++)
首先假定矩阵行列数r和c为固定常数,且被处理的矩阵数据存放于Matrix类的私有数据成员mem数组之中,并以类成员方式重载各运算符。
下面给出Matrix类的定义,请对类体内声明的函数给出其定义,完善程序使之实现相应功能。
const int r=3; const int c=3;
classMatrix{
cout<<C<<endl;
cout<<endl<<"矩阵之差:"<<endl;
C=A-B;
cout<<C<<endl;
C=A*B;
cout<<endl<<"矩阵之积:"<<endl;
实验二运算符重载

实验二运算符重载班级电科2班学号Xb11640218 姓名张俊为1.实验目的:(1)学习定义和使用重载运算符。
(2)熟悉拷贝构造函数。
2.实验任务:(1)对比通过函数来实现复数相加和通过重载运算符实现复数相加的不同之处(2)定义RMB类,数据成员有yuan、jf,请为该类定义构造函数、并重载“+”、“-”、“<<”、“>>”。
选做:定义账户类,有账号、户名、余额等属性,具有存款、取款等操作,可以把RMB类对象作为成员,进行存取款操作。
(3)以下程序实际要输出0~9之间每个数的平方,请用增加拷贝构造函数的方法避免存在的问题。
#include <iostream.h>#include <stdlib.h> class Vector{public:Vector(int s=100); void Display();void Set();~Vector(); protected:int size;int* buffer;};Vector::Vector(int s) {buffer=new int[size=s]; for(int i=0; i<size; i++)buffer[i]=i*i;} void Vector::Display(){for(int j=0; j<size; j++)cout <<buffer[j] <<endl;}void Vector::Set(){for(int j=0; j<size; j++)buffer[j]=j+1;}Vector::~Vector(){ delete[]buffer; }void main(){Vector a(10);Vector b(a);a.Set();b.Display();}3.设计思路:(1)通过函数来实现复数相加时是在Complex类外定义一个Complex类的成员函数Complex_add。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二运算符重载一、实验目的●理解运算符重载的概念●掌握运算符重载方式●掌握重载单目运算符、双目运算符二、实验内容1、理解运算符重载的概念。
(1)将例题4.1中的Add函数声明为对象方法,重新定义。
#include<iostream>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){}void Show() const;Complex Add(const Complex &z1){Complex z(this->real+z1.real,this->image+z1.image);return z;}};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}int main(){Complex z1(2,3),z2(6,-5),z3;z1.Show();z2.Show();z3=z2.Add(z1);z3.Show();system("pause");return 0;}(2)将例题 4.2中的友元函数friend Complex operator+(const Complex &z1,const Complex &z2); 修改为非友元函数、非成员函数,即普通函数。
#include<iostream>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){}double GetReal() const{return real;}double GetImage() const{return image;}void Show() const;};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}Complex operator+(const Complex &z1,const Complex &z2){return Complex(z1.GetReal()+z2.GetReal(),z1.GetImage()+z2.GetImage()); }int main(){Complex z1(2,3),z2(6,-5),z3;z1.Show();z2.Show();z3=z1+z2;z3.Show();system("pause");return 0;}2、运算符重载类的成员函数(1)重载单目运算符“-”,对复数进行取反运算。
例如:Complex z1(3,4);z1=-z1; // 要求输出:-3-4i#include<iostream>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){} void Show() const;Complex operator-(){return Complex(-real,-image);}};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}int main(){Complex z1(2,3),z3;z1.Show();z3=-z1;z3.Show();system("pause");return 0;}(2)重载双目运算符“= =”,判断两个复数是否相等。
例如:Complex z1(3,4),z2(4,5),z3(3,4);cout<<(z1==z2)<<endl; // 要求输出:0cout<<(z1==z3)<<endl; // 要求输出:1#include<iostream>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){}void Show() const;bool operator==(const Complex &z1){if(this->real==z1.real&&this->image==z1.image)return true;elsereturn false;}};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}int main(){Complex z1(3,4),z2(4,5),z3(3,4);z1.Show();z2.Show();z3.Show();cout<<(z3==z1)<<endl;cout<<(z2==z1)<<endl;system("pause");return 0;}3、运算符重载为类的友元函数(1)重载单目运算符“!”,对复数进行求模运算。
例如:Complex z1(3,4);cout<<!z1<<endl; // 要求输出:5#include<iostream>#include<math.h>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){}void Show() const;friend double operator!(const Complex &z1){return sqrt(z1.real*z1.real+z1.image*z1.image);}};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}int main(){Complex z1(2,3);z1.Show();cout<<"复数的摸为:"<<!z1<<endl;system("pause");return 0;}(2)重载双目运算符“! =”,判断两个复数是否相等。
例如:Complex z1(3,4),z2(4,5),z3(3,4);cout<<(z1!=z2)<<endl; // 要求输出:1cout<<(z1!=z3)<<endl; // 要求输出:0#include<iostream>using namespace std;class Complex{private:double real;double image;public:Complex(double r=0,double i=0):real(r),image(i){}void Show() const;friend bool operator!=(const Complex &z1,const Complex &z2){if(z2.real==z1.real&&z2.image==z1.image)return false;elsereturn true;}};void Complex::Show() const{if(image<0) cout<<real<<image<<"i"<<endl;else if(image==0) cout<<real<<endl;else cout<<real<<"+"<<image<<"i"<<endl;}int main(){Complex z1(3,4),z2(4,5),z3(3,4);z1.Show();z2.Show();z3.Show();cout<<(z3!=z1)<<endl;cout<<(z2!=z1)<<endl;system("pause");return 0;}?。