实验12 运算符重载

  • 格式:doc
  • 大小:199.50 KB
  • 文档页数:27

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

void SetYear(int y); // 设置年

int SetMonth(int m); // 设置月

int SetDay(int d); // 设置日

int GetYear() const; // 返回年

int GetMonth() const; // 返回月

int GetDay() const; // 返回日

static int IsLeapyear(int y); // 判断年份y是否为润年

static int GetDays(int y); // 年份y的天数

static int GetDays(const Date &d); // 日期d当前月份的天数

static int DateToNum(const Date &d); // 返回从公元1年1月1日起的天数

static Date NumToDate(int n); //由从公元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

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

void SetHour(int hh); // 设置小时

void SetMinute(int mm); // 设置分钟

void SetSecond(int ss); // 设置秒

int GetHour() const; // 返回小时

int GetMinute() const; // 返回分钟

int GetSecond() const; // 返回秒

三、实验程序及结果

1、

#include

using namespace std;

class chessBoard

{

private:

int a[2][2];

public:

chessBoard(int y,int b,int c,int d)

{

a[0][0]=y;

a[0][1]=b; a[1][0]=c;

a[1][1]=d;

}

int & operator()(int b,int c);

};

int & chessBoard::operator()(int b,int c)

{

return a[b][c];

}

int main()

{

chessBoard v(1,2,3,4);

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

cout<

return 0;

}

2、 #include

class xiabiao

{

public:

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

{

for(int i = 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[](int a)

{

int t;

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

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

{

if(jihe[j]

{

t = jihe[j];

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

jihe[j+1] = t;

}

}

return jihe[a-1];

} private:

int jihe[10];

};

int main()

{

xiabiao xi;

cout<<"最大的为:"<

cout<<"第二的为:"<

cout<<"第三的为:"<

return 0;

}

3、

#include

#include

class Polynomial

{

public: Polynomial();

Polynomial operator+(const Polynomial&)const;

Polynomial operator-(const Polynomial&)const;

Polynomial operator*(const Polynomial&);

Polynomial& operator+=(const Polynomial&);

Polynomial& operator-=(const Polynomial&);

Polynomial& operator*=(const Polynomial&);

void EnterTerms();//输入函数

void PrintPolynomial( )const;//打印函数

private:

int exponents[100];

int coefficients[100];

void polynomialCombine(Polynomial&);//合并同类项

};

Polynomial::Polynomial()

{

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

{

coefficients[i]=0;

exponents[i]=0;

}

}

void Polynomial::PrintPolynomial() const//输出函数

{

int start;//输出累加系数

bool zero=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(int x=start;x<100;x++) //输出其他各项

if(coefficients[x]!=0)

{

cout<

<

if((exponents[x]!=0)&&(exponents[x]!=1))

cout<<'^'<

zero=true;

}

if(!zero) //多项式为空

cout<<'0';

cout<

}

Polynomial Polynomial::operator+(const Polynomial& r) const

{

Polynomial temp;

bool exponentExists;