实验报告4(运算符的重载)
实验四流运算符的重载及文件的使用

实验题目(1):在多态性实验第2题的基础上,在复数类中增加输入流运算符>>和输出流运算符<<的重载,主函数通过“cin>>对象名”输入对象的值,通过“cout<<对象名”输出对象的值,输出复数值时将原来主函数中“对象名.print( )”改成“cout<<对象名”形式。
在上一步完成的基础上,将复数类改成一个类模板,只设一个模板参数,即实部和虚部用同一种类型,修改相应的代码,完成输入、输出功能。
Complex <T> operator-(const Complex <T> &a,const Complex <T> &b)
{
Complex <T> temp;
==return temp;
}
template <class T>
Complex <T> Complex <T>::operator*(const Complex <T> &a)
friend istream &operator>>(istream &in,const Complex &a);
Complex operator*(const Complex &a);
Complex operator/(const Complex &a);
};
template <class T>
ostream &operator<<(ostream &out,const Complex &a)
{
实验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。
实验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)编写实验报告。
C++实验4

《C++面向对象程序设计》实验报告
第 1 页 共 1 页 实验4 运算符重载
班级_____________ 学号_______________ 姓名_______________
[实验目的]
1、了解运算符重载的概念和使用方法。
2、掌握几种常用的运算符重载的方法。
[实验要求]
给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。
[实验学时] 2学时。
[实验内容]
1、有两个2×3矩阵a 和b ,元素均为整型数。
重载运算符“+”,使之能用于
矩阵相加。
如: c=a+b 。
2、定义一个复数类Complex ,重载运算符“++”, 能够使复数的实部增1。
试分别实现复数的前置自增和后置自增。
要求:将前置自增函数重载为Complex 类的成员函数;后置自增函数重载为Complex 类的友元函数。
请编程序实现上述要求并测试程序。
3、定义长方体Rectangle 类,重载输入运算符“>>”和输出运算符“<<”,用
来实现Rectangle 对象信息的输入以及相关信息的输出。
[实验总结]
给出对本次实验的总结。
[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;}运行结果【实例编程】运行结果。
tutorial4----运算符的重载

实验四运算符重载一、实验编号10003809172j二、实验学时2学时三、实验目的1、熟练掌握运算符重载的方法。
2、熟练运用运算符重载解决实际问题。
四、实验内容1、定义复数Complex类,包含私有成员double real,imag,重载运算符+和-2、定义Date类,并重载运算符++五、实验原理1、运算符重载(1)成员函数方式运算结果类型operator 运算符(形式参数){ 函数体}(2)友元函数方式friend 结果类型operator 运算符(对象参数,参数){ 函数体}双目(返回类型类名∷operator 双目运算符(类名&引用))2、运算符重载规则(1)不可以重载非C++的运算符;(2)运算符重载可以采用成员函数方式或友元方式;(3)被重载的运算符必须保持预定义的的优先级与结合性;(4)应尽量使重载的运算符语义自然、好理解;(5)注意各运算符之间的联系。
六、参考答案1、定义Complex类,包含私有成员double real,imag;并重载运算符+和-1.#include <iostream.h>2.class Complex3.{4.private:5.double real,imag;6.public:plex(double x0=0,double y0=0);plex operator-(const Complex &b);//以成员函数形式重载运算符‘-’9.friend Complex operator+(const Complex &a,const Complex &b);//以友元函数形式重载运算符'+'10.void Display()11.{12.If(real!=0&&imag!=0)13.cout<<real<<'+'<<imag<<'i'<<endl;14.Else if(real!=0&&imag==0)15.Cout<<real<<endl;16.Else if(real==0&&imag!=0)17.Cout<<imag<<"i"<<endl;18.Else19.Cout<<"0"<<endl;20.}21.};plex ::Complex (double x0,double y0)23.{24.real=x0;25.imag=y0;26.}plex Complex ::operator-(const Complex &b)28.{29.return Complex (real-b.real,imag-b.imag);30.}plex operator+(const Complex &a,const Complex &b)32.{33.return Complex (a.real+b.real,a.imag+b.imag);34.}35.void main()36.{37.Double x1,y1,x2,y2;38.cout<<"input x1,y1 of v1,x2,y2 of v2:";39.cin>>x1>>y1>>x2>>y2;plex v1(x1,y1),v2(x2,y2),v;41.42.v=v1+v2;43.cout<<"v1 is:";44.v1.Display();45.cout<<"v2 is:";46.v2.Display();47.cout<<"v1+v2 is:";48.v.Display();49.50.v=v1-v2;51.cout<<"v1-v2 is:";52.v.Display();53.}2、定义Date类,并重载运算符++1.#include <iostream.h>2.class Date{3.private:4.int year;5.int month;6.int day;7.public:8.void SetDate(int x,int y,int z);9.Date operator++();//以成员函数形式重载前置++10.Date operator++(int);//以成员函数形式重载后置++11.void ShowDate(void);12.};13.void Date::SetDate(int x,int y,int z)14.{15.year=x; month=y; day=z;16.}17.Date Date::operator++()//重载前置++18.{19.day=day+1;20.if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day==32)21.{22.day=1;23.month=month+1;24.if(month==13)25.{26.month=1;27.year=year+1;28.}29.}30.else if((month==4||month==6||month==9||month==11)&&day==31)31.{32.day=1;33.month=month+1;34.}35.else if(month==2)36.{37.if ((year%4==0&&year%100!=0)||(year%400==0))//闰年38.{39.if (day==30)40.{41.day=1;42.month=month+1;43.}44.}45.else if (day==29)46.{47.day=1;48.month=month+1;49.}50.}51.return *this;52.}53.Date Date::operator++(int)//重载后置++54.{55.Date temp(*this);56.day=day+1;57.if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day==32)58.{59.day=1;60.month=month+1;61.if(month==13)62.{63.month=1;64.year=year+1;65.}66.}67.else if((month==4||month==6||month==9||month==11)&&day==31)68.{69.day=1;70.month=month+1;71.}72.else if(month==2)73.{74.if ((year%4==0&&year%100!=0)||(year%400==0))//闰年75.{76.if (day==30)77.{78.day=1;79.month=month+1;80.}81.}82.else if (day==29)83.{84.day=1;85.month=month+1;86.}87.}88.return temp;89.}90.void Date::ShowDate(void)91.{92.cout<<year<<"/"<<month<<"/"<<day<<endl;93.}94.void main()95.{96.Date day1;97.int x,y,z;98.cout<<"input current date:";99.cin>>x>>y>>z;100.while(1)//判断输入是否有效101.{102.if ( ((y==1||y==3||y==5||y==7||y==8||y==10||y==12)&&(z<=31)&&(z>=1)) || 103.((y==4||y==6||y==9||y==11)&&(z<=30)) ||104.(((x%4==0&&x%100!=0)||(x%400==0))&&(y==2)&&(z<=29)&&(z>=1)) || 105.(!((x%4==0&&x%100!=0)||(x%400==0))&&(y==2)&&(z<=28)&&(z>=1)) 106.)107.break;108.else109.{110.cout<<"input error!,input current date again:";111.cin>>x>>y>>z;112.}113.}114.day1.SetDate(x,y,z);115.cout<<"the current day is:";116.day1.ShowDate();117.118.day1++;119.cout<<"after day1++ day1 is:";120.day1.ShowDate();121.++day1;122.cout<<"after ++day1 day1 is:";123.day1.ShowDate();124.Date day2=day1++;125.cout<<"after day2=day1++ day1 is:";126.day1.ShowDate();127.cout<<"day2 is:";128.day2.ShowDate();129.day2=++day1;130.cout<<"after day2=++day1 day1 is:";131.day1.ShowDate();132.cout<<"day2 is:";133.day2.ShowDate();134.}。
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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
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;//用重载运算符“+”实现两个矩阵相加
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)
//定义重载运算符“+”函数
cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;
c.display();
system("pause");
return 0;
}
2.调试和运行结果
调试结果如下:
输入数据89 -401 56 11后结果如下:
在输入数据4 5 6 8 -1 23 8后运行结果如下:
using namespace std;
class Matrix//定义Matrix类
{public:
Matrix();//默认构造函数
friend Matrix operator+(Matrix &,Matrix &);//重载运算符“+”
void input();//输入数据函数
void display();//输出数据函数
{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;
}
voidMatrix::input() //定义输入数据函数
{cout<<"input value of matrix:"<<endl;
实验总结:
通过本次实验,是我基本了解了运算符的重载,调试过程中也出现了一些错误,经过仔细查找,均一一改正,在通过与老师和同学的交流和探讨中,巩固和加深了对类的掌握。总之,本次实验使我进一步了解了C++面向对象程序设计。
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]<<" ";}
洛阳理工学院实验报告
系别
计算机
班级
B100509
学号
B10050917
姓名
李雷雷
课程名称
面向对象程序设计
实验日期
实验名称
运算符重载
成绩
实验目的:
1.熟悉运算符重载。
2.学会运算符重载的简单应用。
Hale Waihona Puke 实验条件:电脑,VS Express For Desktop软件
实验内容:
1.编写出程序如下:
#include <iostream>