实验12 运算符重载.docx

上传人:b****5 文档编号:11743568 上传时间:2023-03-31 格式:DOCX 页数:31 大小:86.66KB
下载 相关 举报
实验12 运算符重载.docx_第1页
第1页 / 共31页
实验12 运算符重载.docx_第2页
第2页 / 共31页
实验12 运算符重载.docx_第3页
第3页 / 共31页
实验12 运算符重载.docx_第4页
第4页 / 共31页
实验12 运算符重载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

实验12 运算符重载.docx

《实验12 运算符重载.docx》由会员分享,可在线阅读,更多相关《实验12 运算符重载.docx(31页珍藏版)》请在冰豆网上搜索。

实验12 运算符重载.docx

实验12运算符重载

实验12运算符重载

(2)

牛旭艳智能二班20110807201

一、实验目的

1、进一步理解运算符重载,运用成员函数和友元函数等方法实现运算符的重载。

二、实验内容

1、重载函数调用运算符(),将以下的二维数组的下标表示方法:

chessBoard[row][column]改为常用的表示方法:

chessBoard(row,column)

2、重载下标运算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。

3、开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。

例如:

2x4的指数为4,系数为2。

请开发一个完整的Polynomial类,包括构造函数、析构函数以及"get"函数和"set"函数。

该类还要提供下述重载的运算符(分别使用成员函数和友元函数):

1)重载加法运算符+,将两个多项式相加;

2)重载减法运算符-,将两个多项式相减;

3)重载赋值运算符=,将一个多项式赋给另外一个多项式;

4)重载乘法算符*,将两个多项式相乘;

5)重载加法赋值运算符+=、减法赋值运算符-=以及乘法赋值运算符*=。

4.设计一个日期类Date,,要求:

(1)包含年(year)、月(month)和日(day)私有数据成员。

(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符<<与输入运算符>>等。

提示:

由于各C++编译器对于重载输入/出运算符为友元的兼容性都存在问题,最好重载输入/出运算符不声明为成员函数与友元函数,而声明一般函数,为编程更方便,可增加一些成员函数,比如:

voidSetYear(inty);//设置年

intSetMonth(intm);//设置月

intSetDay(intd);//设置日

intGetYear()const;//返回年

intGetMonth()const;//返回月

intGetDay()const;//返回日

staticintIsLeapyear(inty);//判断年份y是否为润年

staticintGetDays(inty);//年份y的天数

staticintGetDays(constDate&d);//日期d当前月份的天数

staticintDateToNum(constDate&d);//返回从公元1年1月1日起的天数

staticDateNumToDate(intn);//由从公元1年1月1日起的天数返回日期

润年条件:

年份能被4整除,并且年份不能被100整除,或者年份能被400整除

润年天数:

366

平年天数:

365

润年2月份天数:

29

平年2月份天数:

28

5.设计一个时间类Time,要求:

(1)包含时(hour)、分(minute)和秒(second)私有数据成员。

(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<<与输入运算符>>等。

提示:

可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。

时间转换成秒数:

秒数=时*3600+分*60+秒

秒数转换成时间:

时=秒数/3600

分=(秒数-时*3600)/60

秒=秒数%60

为编程更方便,可增加一些成员函数,比如:

voidSetHour(inthh);//设置小时

voidSetMinute(intmm);//设置分钟

voidSetSecond(intss);//设置秒

intGetHour()const;//返回小时

intGetMinute()const;//返回分钟

intGetSecond()const;//返回秒

3、实验程序及结果

1、

#include

usingnamespacestd;

classchessBoard

{

private:

inta[2][2];

public:

chessBoard(inty,intb,intc,intd)

{

a[0][0]=y;

a[0][1]=b;

a[1][0]=c;

a[1][1]=d;

}

int&operator()(intb,intc);

};

int&chessBoard:

:

operator()(intb,intc)

{

returna[b][c];

}

intmain()

{

chessBoardv(1,2,3,4);

v(0,1)=v(1,0);

cout<

return0;

}

2、

#include

classxiabiao

{

public:

xiabiao()//构造函数赋予数组初值

{

for(inti=0;i<10;i++)

if(i>5)

jihe[i]=(-1)*2*i;

else

jihe[i]=i+3;

cout<<"所有元素:

"<

for(i=9;i>=0;i--)

cout<

}

int&operator[](inta)

{

intt;

for(inti=0;i<10;i++)//冒泡排序大的放前面

for(intj=0;j<9-i;j++)

{

if(jihe[j]

{

t=jihe[j];

jihe[j]=jihe[j+1];

jihe[j+1]=t;

}

}

returnjihe[a-1];

}

private:

intjihe[10];

};

intmain()

{

xiabiaoxi;

cout<<"最大的为:

"<

cout<<"第二的为:

"<

cout<<"第三的为:

"<

return0;

}

3、

#include

#include

classPolynomial

{

public:

Polynomial();

Polynomialoperator+(constPolynomial&)const;

Polynomialoperator-(constPolynomial&)const;

Polynomialoperator*(constPolynomial&);

Polynomial&operator+=(constPolynomial&);

Polynomial&operator-=(constPolynomial&);

Polynomial&operator*=(constPolynomial&);

voidEnterTerms();//输入函数

voidPrintPolynomial()const;//打印函数

private:

intexponents[100];

intcoefficients[100];

voidpolynomialCombine(Polynomial&);//合并同类项

};

Polynomial:

:

Polynomial()

{

for(inti=0;i<100;i++)//置零

{

coefficients[i]=0;

exponents[i]=0;

}

}

voidPolynomial:

:

PrintPolynomial()const//输出函数

{

intstart;//输出累加系数

boolzero=false;

if(coefficients[0])//常数存在

{

cout<

start=1;

zero=true;

}

else

{

if(coefficients[1])

{

cout<

if((exponents[1]!

=0)&&(exponents[1]!

=1))

cout<<'^'<

zero=true;

}

start=2;

}

for(intx=start;x<100;x++)//输出其他各项

if(coefficients[x]!

=0)

{

cout<

:

showpos)<

<

:

showpos)<<'x';

if((exponents[x]!

=0)&&(exponents[x]!

=1))

cout<<'^'<

zero=true;

}

if(!

zero)//多项式为空

cout<<'0';

cout<

}

PolynomialPolynomial:

:

operator+(constPolynomial&r)const

{

Polynomialtemp;

boolexponentExists;

temp.coefficients[0]=coefficients[0]+r.coefficients[0];//计算常量之和

for(ints=1;(s<100)&&(r.exponents[s]!

=0);s++)

{

temp.coefficients[s]=r.coefficients[s];

temp.exponents[s]=r.exponents[s];

}

for(intx=1;x<100;x++)//计算其他各项之和

{

exponentExists=false;

for(intt=1;(t<100)&&(!

exponentExists);t++)

if(exponents[x]==temp.exponents[t])

{

temp.coefficients[t]+=coefficients[x];

exponentExists=true;

}

if(!

exponentExists)

{

temp.exponents[s]=exponents[x];

temp.coefficients[s]+=coefficients[x];

s++;

}

}

returntemp;

}

Polynomial&Polynomial:

:

operator+=(constPolynomial&r)

{

*this=*this+r;

return*this;

}

PolynomialPolynomial:

:

operator-(constPolynomial&r)const

{

Polynomialtemp;

boolexponentExists;

temp.coefficients[0]=coefficients[0]-r.coefficients[0];

for(ints=1;(s<100)&&(exponents[s]!

=0);s++)

{

temp.coefficients[s]=coefficients[s];

temp.exponents[s]=exponents[s];

}

for(intx=1;x<100;x++)

{

exponentExists=false;

for(intt=1;(t<100)&&(!

exponentExists);t++)

if(r.exponents[x]==temp.exponents[t])

{

temp.coefficients[t]-=r.coefficients[x];

exponentExists=true;

}

if(!

exponentExists)

{

temp.exponents[s]=r.exponents[x];

temp.coefficients[s]-=r.coefficients[x];

s++;

}

}

returntemp;

}

Polynomial&Polynomial:

:

operator-=(constPolynomial&r)

{

*this=*this-r;

return*this;

}

PolynomialPolynomial:

:

operator*(constPolynomial&r)

{

Polynomialtemp;

ints=1;

for(intx=0;(x<100)&&(x==0||coefficients[x]!

=0);x++)

for(inty=0;(y<100)&&(y==0||r.coefficients[y]!

=0);y++)

if(coefficients[x]*r.coefficients[y])

if((exponents[x]==0)&&(r.exponents[y]==0))

temp.coefficients[0]+=coefficients[x]*r.coefficients[y];

else

{

temp.coefficients[s]=coefficients[x]*r.coefficients[y];

temp.exponents[s]=exponents[x]+r.exponents[y];

s++;

}

polynomialCombine(temp);//合并同类项

returntemp;

}

voidPolynomial:

:

polynomialCombine(Polynomial&w)

{

Polynomialtemp=w;

intexp;

for(intx=0;x<100;x++)

{

w.coefficients[x]=0;

w.exponents[x]=0;

}

for(x=1;x<100;x++)

{

exp=temp.exponents[x];

for(inty=x+1;y<100;y++)

if(exp==temp.exponents[y])

{

temp.coefficients[x]+=temp.coefficients[y];

temp.exponents[y]=0;

temp.coefficients[y]=0;

}

}

w=temp;

}

Polynomial&Polynomial:

:

operator*=(constPolynomial&r)

{

*this=*this*r;

return*this;

}

voidPolynomial:

:

EnterTerms()//初始函数

{

boolfound=false;

intnumberOfTerms,c,e;

cout<<"Enternumberofpolynomialterms:

";

cin>>numberOfTerms;

for(intn=1;n<=numberOfTerms;n++)

{

cout<<"Entercoefficient:

";//系数

cin>>c;

cout<<"Enterexponent:

";//阶数

cin>>e;

if(c!

=0)

{

if(e==0)//初始置零

{

coefficients[0]+=c;//常数

continue;

}

for(intterm=1;(term<100)&&(coefficients[term]!

=0);term++)//找是否阶数相同

if(e==exponents[term])

{

coefficients[term]+=c;

exponents[term]=e;

found=true;

}

if(!

found)//阶数不同另外储存

{

coefficients[term]+=c;

exponents[term]=e;

}

}

}

}

voidmain()

{

Polynomiala,b,c,t,d;

a.EnterTerms();

b.EnterTerms();

cout<

";

a.PrintPolynomial();

cout<

";

b.PrintPolynomial();

cout<

";

c=a+b;

c.PrintPolynomial();

cout<

";

t=a;

a+=b;

a.PrintPolynomial();

cout<

";

a=t;

c=a-b;

c.PrintPolynomial();

cout<

";

a-=b;

a.PrintPolynomial();

cout<

";

a=t;

c=a*b;

c.PrintPolynomial();

cout<

";

a*=b;

a.PrintPolynomial();

cout<

}

4、

#include"iostream.h"

classDate

{

public:

Date(inta=0,intb=0,intc=0);

voidSet_Date(inta,intb,intc);

voidGet_Date();

Dateoperator+(int);

Dateoperator-(int);

friendostream&operator<<(ostream&,Date&);

friendistream&operator>>(istream&,Date&);

private:

intyear,mounth,date,m;

};

Date:

:

Date(inta,intb,intc)

{

year=a;

mounth=b;

date=c;

m=1;

}

voidDate:

:

Set_Date(inta,intb,intc)

{

year=a;

mounth=b;

date=c;

}

voidDate:

:

Get_Date()

{

if(m==1)

cout<

else

cout<<"刚才输入的天数不符合要求!

"<

}

DateDate:

:

operator+(inta)

{

if(a>28)

{

m=0;

return*this;

}

else

{

if((year%400==0)||((year%4==0)&&(year%100!

=0)))

{

if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11))

{

if((date+a)<=30)

date=date+a;

else

{

date=date+a-30;

mounth++;

}

}

else

{

if(mounth==2)

{

if((date+a)<=29)

date=date+a;

else

{

date=date+a;

mounth++;

}

}

else

{

if((date+a)<=31)

date=date+a;

else

{

date=date+a-31;

if(mounth==12)

{

year++;

mounth=1;

}

else

mounth++;

}

}

}

}

else

{

if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11))

{

if((date+a)<=30)

date=date+a;

else

{

date=date+a-30;

mounth++;

}

}

else

{

if(mounth==2)

{

if((date+a)<=28)

date=date+a;

else

{

date=date+a-28;

mounth++;

}

}

else

{

if((date+a)<=31)

date=date+a;

else

{

date=date+a-31;

if(mounth==12)

{

year++;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1