实验十_运算符重载

合集下载

C++基础系列——运算符重载

C++基础系列——运算符重载

C++基础系列——运算符重载1. 运算符重载简介所谓重载,就是赋予新的含义。

函数重载(Function Overloading)可以让⼀个函数名有多种功能,在不同情况下进⾏不同的操作。

同样运算符重载(Operator Overloading)可以让同⼀个运算符可以有不同的功能。

可以对 int、float、string 等不同类型数据进⾏操作<< 既是位移运算符,⼜可以配合 cout 向控制台输出数据也可以⾃定义运算符重载:class Complex{public:Complex();Complex(double real, double imag);Complex operator+(const Complex &a) const;void display() const;private:double m_real;double m_imag;};// ...// 实现运算符重载Complex Complex::operator+(const Complex &A) const{Complex B;B.m_real = this->m_real + A.m_real;B.m_imag = this -> m_imag + A.m_imag;return B;// return Complex(this->m_real + A.m_real, this->m_imag + A.m_imag);}int main(){Complex c1(4.3, 5.8);Complex c2(2.7, 3.7);Complex c3;c3 = c1 + c2; // 运算符重载c3.display();return 0;}运算结果7 + 9.5i运算符重载其实就是定义⼀个函数,在函数体内实现想要的功能,当⽤到该运算符时,编译器会⾃动调⽤这个函数,它本质上是函数重载。

运算符重载实验报告

运算符重载实验报告

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

姜志达实验十报告

姜志达实验十报告

实验十实验报告——姜志达1.实验目的(1)掌握运算符重载的定义及实现。

(2)掌握具有运算符重载的应用。

2.实验设备硬件环境:微型计算机软件环境:操作系统:Windows语言环境:Visual C++3.预习要求学习教材有关运算符重载的内容,对基本运算符重载及特殊运算符重载有充分的理解。

对实验基本要求应在上机实验前仔细阅读,程序应事先编制完成,上机时录入调试,同时还应设计相应的测试用例集,检查程序的正确性、可靠性、完备性和容错能力。

4.实验内容(1)将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。

在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。

因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。

另外有一个类型转换函数int(),用来将类类型向整型转换。

程序中的两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。

#include "iostream.h"#include "string.h"#include "conio.h"class binary { //定义二进制类char bits[16]; //二进制字模数组public:binary(char *); //字符串参数构造函数binary(int); //整型参数构造函数friend binary operator +(binary,binary); //重载“+”friend binary operator -(binary,binary); //重载“-”operator int(); //类类型转换函数void print();};binary::binary(char *num){int isrc=strlen(num)-1; //字符串长度-1为最低位int idest=15;while(isrc>=0 && idest>=0)bits[idest--]=(num[isrc--]=='0'?'0':'1'); // 逐位赋值 while(idest>=0) bits[idest--]='0'; // 空高位值0 }binary::binary(int num){for(int i=15; i>=0;i--){ bits[i]=( (1) ); //求余数num>>=1; //移位,相当于整除2}}binary operator +(binary n1, binary n2){unsigned carry=0;unsigned value;binary res="0";for(int i=15; i>=0; i--){value=(n1.bits[i]=='0'?0:1)+( (2) )+carry;res.bits[i]=(value%2==0?'0':'1');carry=value>>1;}return res;}binary operator -(binary n1, binary n2){unsigned borrow=0;int value;binary res="0";for(int i=15; i>=0; i--){value=(n1.bits[i]=='0'?0:1)-(n2.bits[i]=='0'?0:1)+borrow; res.bits[i]=(value==-1||value==1?'1':'0');borrow=(value==-1||borrow!=0&&(value==0||value==1)?1:0); }return res;}binary::operator int(){unsigned value=0;for(int i=0; i<=15; i++)value=( (3) )+(bits[i]=='0'?0:1);return value;}void binary::print(){char str[17];strncpy(str,bits,16);str[16]='\0';cout<<str<<"\n";}main(){binary n1="1011";binary n2=int(n1)+15;binary n3=n1-binary(7);n1.print();n2.print();n3.print();cout<<int(n2)+5<<endl;cout<<n2-binary(5)<<endl;cout<<n3+binary(5)<<endl;cout<<int(n3)-5<<endl;getch();return 1;}[基本要求]●阅读下列程序,根据题意要求在处填上合适的内容完成程序。

c++运算符重载实验心得

c++运算符重载实验心得

c++运算符重载实验心得
C++运算符重载是一项功能强大的特性,它允许程序员通过自定义运算符的行为来简化和优化代码。

在我的实验中,我学习了如何创建和重载不同类型的运算符,以及如何在自定义类中使用它们。

在C++中,我们可以使用运算符重载来定义自己的类和数据类型的操作。

例如,我们可以重载加号运算符来实现两个自定义类的相加操作。

这使得代码更易于阅读和理解,并且可以减少代码的复杂性。

在我的实验中,我学习了如何重载算术运算符,比如加、减、乘和除。

我还学习了如何重载比较运算符,如小于、大于和等于运算符。

这些重载的运算符允许我直接使用自定义类的对象进行运算而不需要编
写复杂的代码。

此外,我还学习了如何重载输入和输出运算符,使得输入和输出数据变得更加简单和直观。

这使得程序员可以更加轻松地向用户展示数据或者从用户那里获取数据。

总之,C++运算符重载是一项强大的特性,它可以极大地简化和优化代码。

通过学习和掌握这项特性,程序员可以更加轻松地创建和使用自定义类和数据类型。

运算符重载和类模板实验报告

运算符重载和类模板实验报告
1每一个类模板的成员函数的外部定义都与一般函数模板的定义一样必须以类型形参开始此外还应加以函数返回值类型类范围函数名形参序列类名后面必须加上类型形参
洛阳理工学院实验报告
系别
计算机与信息工程系
班级
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.实验中遇到的问题及解决方法。

[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++运算符重载实验心得

c++运算符重载实验心得

c++运算符重载实验心得
在C++中,运算符可以被重载以在自定义数据类型上执行特定操作。

在这个实验中,我学习了如何使用C++中的运算符重载,以及如何实现对自定义数据类型的专门操作。

以下是我的一些心得体会:
1. 运算符重载可以使代码更加简洁和易读。

通过重载运算符,我们可以使用类似于内置类型的语法来操作自定义类型,这样代码更加容易理解和维护。

2. 每个运算符都有其特定的重载方式。

例如,重载加法运算符可以使用成员函数或自由函数来实现,但重载等于运算符只能使用成员函数来实现。

3. 重载运算符时需要注意参数和返回值。

参数通常是类的对象或引用,而返回值可以是任何类型,包括类的对象、指针或引用。

4. 运算符重载还可以使用友元函数来实现,这样可以访问类的私有成员。

但是,应该谨慎使用友元函数,因为它们可能破坏类的封装性。

5. 在重载运算符时,应该遵循一些常规规则。

例如,对于双目运算
符,应该使用const关键字来保证左右操作数的不可变性;对于单目运算符,应该使用++或--操作符,并将其实现为成员函数。

总之,通过学习C++运算符重载,我更好地理解了类的封装性和抽象性,以及如何在自定义类型上执行特定操作。

这将对我的日后编程工作带来很大的帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
if(m==0)
{
cout<<"分母为零!"<<endl;
exit(1);
}
else if(m<0)
{fz=-z;
fm=-m;
}
else
{fm=m;fz=z;
}
simple();
}
rationalNumber operator+ (rationalNumber& r1,rationalNumber& r2){
bool operator >(const rationalNumber& r1);
bool operator <(const rationalNumber& r1);
bool operator ==(const rationalNumber& r1);
};
rationalNumber::rationalNumber(int z,int m)
public:
date(int m,int d,int y){mo=m;da=d;yr=y;}
date(){}
void disp()
{cout<<mo<<"/"<<da<<"/"<<yr<<endl;}
date operator+(int day)
{
date dt=*this;
day+=dt.da;//cout<<day<<endl;
class A{
public:
A(int i):x(i){}
A()
{x=0;
}
friend A operator ++ (A a);
friend A operator -- (A &a);
void print();
private:
int x;
};
A operator ++ (A a)
{++a.x;
return a;
};
void point::print()
{cout<<"x= "<<x<<" "<<"y= "<<y<<endl;}
point point::operator++()
{++x;++y;
return * this;
}
point point::operator++(int)
{point temp(* this);
obj3.print();
obj2.print();
return 0;
}
程序运行的结果是:
x= 6 y= 9
x= 6 y= 9
x= 7 y= 10
x= 7 y= 10
x= 9 y= 7
x= 8 y= 6
x= 8 y= 6
x= 7 y= 5
Press any key to continue
2)构造一个分数类rationalNumber,该类中包括分子和分母两个成员数据,并具有下述功能:
5.15
#include<iostream>
using namespace std;
class Words{
public:
Words(char*s)
{str=new char[strlen(s)+1];
strcpy(str,s);
len=strlen(s);
}
void disp();
char operator[](int n);
{ int k,i;
if(abs(fz)<fm)
k=abs(fz);
else
k=fm;
for(i=1;i<=k;i++)
{
if(fz%i==0&&fm%i==0)
{
fz=fz/i;
fm=fm/i;
}
}
}
//m,n的最大公约数,假定m、n的最大公约数是v,则它们的最小公倍数就是m*n/v。
int fun (int m,int n){
实验十运算符重载
1.实验目的及要求
1)掌握运算符重载的基本概念和方法。
2)熟习几种特殊的运算符的重载。
2.实验内容
1.分析下面的程序,指出程序运行的结果:
1)
#include<iostream.h>
class point{
int x,y;
public:
point(int vx,int vy){
x=vx; y=vy;}
public:
point(int x1=0,int y1=0)
{x=x1;y=y1;}
void print();
point operator++();
point operator++(int);
point operator--();
point operator--(int);
private:
int x,y;
point obj(5,8),obj1,obj2(9,7),obj3;
++obj;
obj.print();
obj1=obj++;
obj1.print();
obj.print();
obj.print();
cout<<endl;
obj2.print();
--obj2;
obj2.print();
obj3=obj2--;
rationalNumber r;
if(r1.fz==0)
return r2;
else
{r.fm=r1.fm*r2.fm;
r.fz=(r1.fz*r2.fm)+(r2.fz*r1.fm);
return r;
}
}
rationalNumber operator- (rationalNumber& r1,rationalNumber& r2){
return 0;
}
运行结果:
This is C++ book.
第1个字符: T
第16个字符: k
第26个字符:数组下标超界!
Press any key to continue
5.16
#include<iostream>
using namespace std;
class Length{
int meter;
public:
Length(int m)
{meter=m;
}
operator double()
{return (1.0*meter/1000);
}
};
int main()
{Length a(1500);
double m=float(a);
cout<<"m="<<m<<"千米"<<endl;
return 0;
rationalNumber r;
r.fm=r1.fm*r2.fm;
r.fz=r1.fz*r2.fz;
return r;
}
rationalNumber operator/ (rationalNumber& r1,rationalNumber& r2){
1建立构造函数,它能防止分母为0,当分数不是最简形式时进行约分,并避免分母为负数。
2重载加法、减法、乘法和除法运算符。
3重载关系运算符:>、<、==等。
提示:分数约分函数:
class rationalNumber//分数类
{intfm,fz;//fm—分母fz—分子
……
};
void simple()//约分函数
}
A operator -- (A &a)
{--a.x;
return a;
}
void A::print()
{cout<<x<<endl;}
int main()
{
A a(பைடு நூலகம்);
++a;
a.print();
--a;
a.print();
return 0;
}
运行结果:
7
6
Press any key to continue
friend rationalNumber operator -(rationalNumber& r1,rationalNumber& r2);
friend rationalNumber operator *(rationalNumber& r1,rationalNumber& r2);
friend rationalNumber operator /(rationalNumber& r1,rationalNumber& r2);
return point(px,py);
}
void print(){cout<<x<<","<<y<<endl;}
};
void main(void)
{
point p1(10,10),p2(20,20);
相关文档
最新文档