当前位置:文档之家› 实验十_运算符重载

实验十_运算符重载

{
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);
相关主题