实验四运算符重载

合集下载

实验4+运算符重载和类模板

实验4+运算符重载和类模板
洛阳理工学院实验报告
系别
计算机与信息工程系
班级
B110507
学号
姓名
课程名称
C++面向对象程序设计
实验日期
实验名称
运算符重载和类模板
成绩
实验内容和步骤:
1.分析教程“函数模板”中的例子,自行设计一个简单的类模板。
2.分析教程“运算符重载”中的例子,自行设计一个简单的重载运算符。
3.指出下面程序中的错误,改正并运行。
cout<<"c1*c2=";
c3.display();
return 0;}
3.所给程序的分析如下:
(1)错误一:类的结尾处少了一个分号“;”;
(2)错误二:main函数没有定义类型,应该定义为void或者为int在最后再加一句“return0;”;
(3)错误三:因为定义的对象数组没有参数,所以应该在添加一个无参的构造函数。
(4)运行结果:
5
6
实验总结:
通过本次试验,我对C++的多态性有了进一步的了解,在C++程序中,不同功能的函数可以用同一个函数名,可以用一个函数名调用不同内容的函数。
Complex operator*(Complex&c2);
void display();
private:
double real;
double imag;};
Complex Complex::operator*(Complex&c2)
{Complex c;
c.real=real*c2.real-imag*c2.imag;
{ a=x;b=y;}
numtype max()

运算符重载实验报告

运算符重载实验报告

运算符重载实验报告运算符重载实验报告引言:运算符重载是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。

合肥学院C++实验4 运算符重载

合肥学院C++实验4 运算符重载
2、有两个矩阵 a 和 b,均为 2 行 3 列。求两个矩阵之和。重载运算符“+”使之 能够用于矩阵的加法。如 c = a + b.并重载流插入运算符“<<”和流提取运 算符“>>”,使之能够用于矩阵的输入和输出。
二、实验内容
(根据本次实验项目的具体任务和要求,完成相关内容,可包括:算法描述或流 程图、源代码、实验运行步骤、测试数据与实验结果、其他 )
源代码:
(1) #include <iostream> using namespace std;
class Complex { public:
Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator-(Complex &c2); Complex operator*(Complex &c2); Complex operator/(Complex &c2); void display(); private: double real; double imag; };
不透彻。
解决方法:再看两遍,夯实基础。
分析小结:1.类型转换函数只能是成员函数,不能是友元函数。因为转换的主题
是类的对象,即转换函数的操作数是对象。
2. 转换函数不必显式调用,它由编译器自动调用,即隐式调用。
void Complex::display() {
cout<<"("<<real<<","<<imag<<"i)"<<endl; }

实验4 c++运算符重载(1)

实验4 c++运算符重载(1)

实验4 运算符重载(一)班级:学号:姓名:成绩:1、实验目的(1)理解运算符重载的意义和重载规则;(2)掌握运算符重载为成员函数和友元函数的方法;(3)掌握单目运算符和双目运算符的重载方法。

2、实验内容有两个矩阵a和b,均为2行3列。

(1)求两个矩阵之和。

重载运算符“+”,使之能用于矩阵相加。

如:c=a+b。

(2)如果参加运算的两个操作数中一个是整数,即矩阵+3或3+矩阵形式。

进行加法运算时也能得出和。

(3)定义自加运算符的前置(++i)和后置(i++)重载,编写相应程序验证它的正确性。

3、选作题(1)定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除运算。

运算符重载函数作为Complex类的成员函数。

请编程,分别求两个复数的和、差、积、商。

(2)定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。

参加运算的两个操作数可以都是类的对象,也可以其中有一个是整数,顺序任意。

例如:c1+c2,i+c,c+i均合法(其中,c、c1、c2为复数类的对象,i为整数)。

请编程,分别求两个复数的和、整数和复数之和。

(3)设向量X=(x1,x2,x3)和Y=(y1,y2,y3),则它们之间的加减和积分别定义为:X+Y=(x1+y1,x2+y2,x3+y3)X-Y=(x1-y1,x2-y2,x3-y3)X*Y=(x1*y1+x2*y2+x3*y3)编程序对运算符“+”、“-”、“*”重载,实现向量之间的加、减、乘运算。

4、实验总结(1)编写相应程序,并调试运行。

注意在调试过程中用不同的数据进行测试。

(有效和无效数据)(2)编写实验报告。

4第四章 运算符重载

4第四章 运算符重载
1 2 3
const complex operator - (const complex &c) const; void display(); //输出复数 private: //私有数据成员 1.是为了堵塞a+b=c的漏洞。 double real; //复数实部 2. 3.是为了扩大适应性。 double imag; //复数虚部 };
17
[ ]运算符重载为成员函数
下标运算符[]可以重载: 重载形式为:operator[](int); 当 X x; 隐含调用。 x[y] 可被解释为: 显式调用。 x. operator [ ](y); 只能重载为成员函数,不能使用友元函数。 这个类显然是个‚数组类‛。
18
前置++和后置++重载为成员函数
9
使用
void main(){
complex c1(5,4),c2(2,10),c3; //三个复数类的对象 cout<<"c1="; cout<<"c2="; c1.display(); c2.display();
c3=c1-c2; //使用重载运算符完成复数减法 cout<<"c3=c1-c2="; c3.display(); 程序输出结果为:
这三个运算符是许多 教课书没有提到的。
唯一的一个三目运 算符不能重载。
3
运算符重载的基础
设计运算符重载函数,首先要了解运算符原本的运算语义。重
载函数要忠实遵守该运算符作用于基本数据类型时的语义,
并表现出自身所特有的性质。 例如:+ 、+= 、=、++(前)、++(后) ....

[C++]运算符重载实验报告

[C++]运算符重载实验报告

+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;}运行结果【实例编程】运行结果。

C++程序设计-实验4 运算符重载

C++程序设计-实验4 运算符重载
实验
一、实验目的
1.掌握运算符重载的规则。
2.掌握几种常用的运算符重载的方法。
3.了解转换构造函数的使用方法。
二、实验内容
1.阅读下面的程序,写出程序运行的结果。
(1)
#include<iostream>
using namespace std;
class ABC{
int a,b,c;
public:
ABC(int x,int y,int z):a(x),b(y),c(z){}
friend ostream &operator<<(ostream &out,ABC& f);
};
ostream &operator<<(ostream &out,ABC& f)
{
out<<"a="<<f.a<<endl<<"b="<<f.b<<endl<<"c="<<f.c<<endl;
return out;
(3)可以动态地设置年、月、日。
(4)可以用运算符= =、!=、<和>对两个日期进行比较。
(5)可以用运算符++、--、+=、-=等完成天数的加减一天或若干天的操作
(6)Date类必须能够正确表达日期,不会出现类似于13月,32日一类的情况。Date类还必须处理闰年的问题,闰年包括:所有能被400整除的年份,以及能被4整除同时又不能被100整除的年份。
}
int main(){
ABC obj(10,20,30);

运算符重载实验报告

运算符重载实验报告

一、实验目的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++程序设计运算符重载实验报告

C++程序设计运算符重载实验报告
(3)能区分单目运算符的前置与后置。
二、实验内容与设计(主要内容,操作步骤、算法描述或程序代码)
本次实验主要实现以下内容:
【项目内容】
定义一个复数类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;

实验四 函数和运算符重载

实验四  函数和运算符重载

实验四函数重载和运算符重载(2学时)一、实验目的1.掌握函数的定义和调用方法。

2.练习重载函数的使用,注意与缺省参数的区别。

3.练习函数模板的使用。

4.练习运算符重载。

5.练习使用系统函数。

6.学习使用VC++的debug调试功能,使用step into追踪到函数内部。

二、实验任务1.定义一个简单的菜单类,运行时显示主菜单,可通过选择进入子菜单(可模仿ATM柜员机的模式,菜单内容可自行设定,相关功能函数可不用实现):主菜单:取现的子菜单1.转账 1.5002.余额查询 2.10003.取现 3.1500Q(退出) 4.返回主菜单请选择(A/S/F/Q)?选择相应的选项后悔执行相应模块并回到主菜单,选择Q则退出。

2.编写重载函数Maxl可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

3.使用重载函数模板重新实现上小题中的函数Maxl。

4.使用系统函数pow(X,y)计算X y的值,注意包含头文件math.h。

5.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

6.写一个点point的类,并重载+实现两个点的坐标相加,和-实现求两点间的距离, >>、<<输入输出点的信息,(1)和(2)分别取点的x和y轴坐标。

三、实验步骤1.考虑抽取菜单的数据和相关操作。

2.分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_2.cpp。

3.使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板maxl,其参数个数不同,实现函数重载,在main()函数中测试函数功能。

程序名:lab3_3.cpp。

4.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的Y次幂的结果,再显示出来。

程序名.1ab3_4.cpp。

5.编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。

运算符重载实验报告参考模板

运算符重载实验报告参考模板

《面向对象程序设计》课程设计报告专业软件工程班级姓名学号指导教师起止时间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();}五、程序运行结果六、体会与收获通过这次实验我进一步了解运算符重载的概念和使用方法,掌握几种常用的运算符重载的方法,学会了使用重载运算符进行复数的加减法。

实验四-运算符重载-实验报告

实验四-运算符重载-实验报告

实验报告实验目的:掌握运算符重载的语法要点,学会运算符重载的编程方法。

实验内容:(1)先读程序,预测程序的输出结果,再运行程序验证程序的输出。

用友元重载方式重新编写次程序。

#include <iostream.h>class V ector{ public:V ector(){}V ector(int i,int j) {x=i;y=j;}friend V ector operator+=(V ector v1,V ector v2){ v1.x+=v2.x;v1.y+=v2.y;return v1;}V ector operator-=(V ector v){ V ector temp;temp.x=x-v.x;temp.y=y-v.y;return temp;}void display(){ cout<<"("<<x<<","<<y<<")"<<endl;}private:int x,y;};void main(){V ector v1(1,2),v2(3,4),v3,v4;v3=v1+=v2;v4=v1-=v2;cout<<"v1=";v1.display();cout<<"v2=";v2.display();cout<<"v3=";v3.display();cout<<"v4=";v4.display();}运行结果:v1=(1,2)v2=(3,4)v4=(-2,-2)Press any key to continue用友元重载方式重新编写次程序:#include <iostream>using namespace std;class V ector{public:V ector(int i = 0,int j = 0){x=i;y=j;}friend V ector operator+=(V ector &v1,V ector &v2) {v1.x+=v2.x;v1.y+=v2.y;return v1;}friend V ector operator-=(V ector &v1,V ector &v2){v1.x=v1.x-v2.x;v1.y=v1.y-v2.y;return V ector( v1.x, v1.y);}void display(){cout<<"("<<x<<","<<y<<")"<<endl;}private:int x,y;};void main(){V ector v1(1,2),v2(3,4),v3,v4;v3 = v1+=v2;v4 = v1-=v2;cout<<"v1="; v1.display();//1,2cout<<"v2="; v2.display();//3,4cout<<"v3="; v3.display();//4,6cout<<"v4="; v4.display();//1,2}运行结果:v2=(3,4)v3=(4,6)v4=(-2,-2)Press any key to continue(2)定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。

4 运算符重载

4 运算符重载

可以将+代表的操作看成一个函数:+为函数的名字,+操作的两个操 作数的类型即为函数形参的类型,+操作的结果的类型即为函数的返回 值类型。
北京化工大学 VC++ 教学课件
2
计算机系 江志英 jiangzy@
运算符重载的提出
C/C++中,每种基本数据类型的变量都可通过几种运算符来做相关计 算,如int型变量,它们可以同“+”,“-”,“*”,“/”等运算符 来做加法,减法,乘法,除法等。如:
4 5 6
常用运算符的重载
重载赋值运算符operator=
重载输入/输出运算符 << | >>
重载下标运算符operator[ ]
重载类型转换函数
北京化工大学 VC++ 教学课件
4
计算机系 江志英 jiangzy@
运算符重载的基本语法
运算符的使用和普通函数在语法上有所不同,但是可以将 运算符看作是一种特殊的函数,操作数是函数的参数,运 算结果是函数的返回值。
北京化工大学 VC++ 教学课件
14
计算机系 江志英 jiangzy@
// 重载运算符的使用示例 int main() { Byte a, b, *bp; +b; -b; ~b; bp = &b; !b; ++b; b++; --b; b--; } //end of main()
3
Vector vec1,vec2 vec1+vec2; vec1-vec2; vec1*vec2; vec1/vec2; 两个向量类对象的加减乘除
C++提供了运算符重载机制来帮助我们实现上述目的。

运算符重载—C++课程实验报告

运算符重载—C++课程实验报告
#include<iostream>
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的值为:";

运算符重载-- 实验报告

运算符重载-- 实验报告

南昌航空大学实验报告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日

运算符重载设计

运算符重载设计
intmain()
{ 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;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成都学院实验报告课程名称C++面向对象程序设计实验名称实验4 运算符重载姓名班级学号指导教师设计时间2016年5月16日1.实验目的1) 进一步了解运算符的概念和使用方法。

2) 掌握几种常用的运算符重载的方法。

3) 了解转换构造函数的使用方法。

4) 了解在Visual C++6.0 环境下进行运算符重载要注意的问题。

1.实验内容1) 声明一个复数Complex,重载运算符“+”,“-”,“/”,“*”,使之能用于复数的加减乘除运算,运算符重载函数作为Complex类的成员函数。

编写程序,分别求两个复数之和、差、积和商。

思考:编写的程序能否用于一个整数与一个复数的算术运算。

#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator +(Complex &c2);Complex operator -(Complex &c2);Complex operator *(Complex &c2);Complex operator /(Complex &c2);void display();private:double real;double imag;};Complex Complex::operator+(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;}Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;}Complex Complex::operator/(Complex &c2){Complex c;c.real = (real*c2.real + imag*c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);c.imag = (imag*c2.real - real*c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);return c;}void Complex::display(){if(imag<0)cout<<"("<<real<<imag<<"i)"<<endl;elsecout<<"("<<real<<"+"<<imag<<"i)"<<endl;}int main(){Complex c1(3,4), c2(5,-10), c3;c3=c1+c2;c3.display();c3=c1-c2;c3.display();c3=c1*c2;c3.display();c3=c1/c2;c3.display();return 0;该程序不能用于用于一个整数与一个复数的算术运算。

显示:错误error C2679: 二进制“+”: 没有找到接受“int”类型的右操作数的运算符(或没有可接受的转换) 2) 声明一个复数Complex,重载运算符“+”,使之能用于复数的加法运算。

参加运算的两个运算量可以都是类对象,也可以有一个整数,顺序任意。

列如:c1+c2,i+c1,c1+i均合法。

#include<iostream>using namespace std;class Complex{public:Complex(double r = 0, double i = 0) :real(r), imag(i){};friend Complex operator +(Complex &c1, Complex &c2);friend Complex operator +(Complex &c, double i);friend Complex operator +(double i, Complex &c);friend ostream& operator << (ostream&, Complex&);friend istream& operator >> (istream&, Complex&);private:double real;double imag;};Complex operator +(Complex &c1, Complex &c2){return Complex(c1.real + c2.real, c1.imag + c2.imag);}Complex operator +(Complex &c, double i){return Complex(i + c.real, c.imag);}Complex operator +(double i, Complex &c){return Complex(i + c.real, c.imag);ostream& operator << (ostream& output, Complex& c){output<<"("<<c.real <<"+"<<c.imag <<"i)";return output;}istream& operator >> (istream& input, Complex& c){cout <<"input real part and imaginary part of complex number:";input>>c.real >>c.imag;return input;}int main(){Complex c1(3, 4), c2(3, 2), c3, c4, c5;c3 = c1 + c2;c4 = 5 + c2;c5 = c1 + 5;cout <<"c3="<< c3 << endl;cout <<"c4="<< c4 << endl;cout <<"c5="<< c5 << endl;return 0;}3) 有两个矩阵a和b,均为2行3列。

求两个矩阵之和。

重载运算符“+”,使之能用于矩阵相加。

如:c=a+b。

#include<iostream>using namespace std;class Matrix{public:Matrix();friend Matrix operator+(Matrix &, Matrix &);void input();void display();private:int mat[2][3];};Matrix::Matrix() {for (int i = 0; i<2; i++)for (int j = 0; j<3; j++)mat[i][j] = 0;}Matrix operator+(Matrix &a, Matrix &b) {Matrix c;for (int i = 0; i<2; i++)for (int j = 0; j<3; j++){c.mat[i][j] = a.mat[i][j] + b.mat[i][j];}return c;}void Matrix::input() {cout <<"input value of matrix:"<< endl;for (int i = 0; i<2; i++)for (int j = 0; j<3; j++)cin >> mat[i][j];}void Matrix::display() {for (int i = 0; i<2; i++){for (int j = 0; j<3; j++){cout << mat[i][j] <<" ";}cout << endl;}}int main(){Matrix a, b, c;a.input();b.input();cout << endl <<"Matrix a:"<< endl;a.display();cout << endl <<"Matrix b:"<< endl;b.display();c = a + b;cout << endl <<"Matrix c = Matrix a + Matrix b :"<< endl;c.display();return 0;}4) 声明定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。

编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。

可以设想为:一位学生大学毕业留校担任老师,他原有的部分数据仍然是有用的,应当保留。

#include<iostream>#include<string>using namespace std;class student{public:student(int n, string na, string s, double sc) :num(n), name(na), sex(s), score(sc) {};int num;string name;string sex;double score;};class teacher{public:teacher();teacher(int n, string na, string s, double sa) :num(n), name(na), sex(s), salary(sa) {};teacher(student &);void display();private:int num;string name;string sex;double salary;};teacher::teacher(){num = 0;name ="";sex ="";salary = 0;}teacher::teacher(student &s){num = s.num;name =;sex =s.sex;salary = 1000;}void teacher::display(){cout <<"num="<< num << endl;cout <<"name: "<< name << endl;cout <<"sex: "<< sex << endl;cout <<"pay: "<< salary << endl; }int main(){student s(1, "aaa", "a", 100);teacher t1(2, "bbb", "b", 1000);teacher t2(s);t2.display();t1.display();return 0;}。

相关文档
最新文档