实验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]; }