运算符重载实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符重载的应用
【实验目的】
1、理解重载运算符的意义。
2、掌握用成员函数、友元函数重载运算符的特点。
3、掌握重载运算符函数的调用方法。
【实验内容】
1.定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。编写
一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“/”
用成员函数实现重载。
⑴分析
两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac–bd )+(ad+bc) i
两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i
复数类及运算符重载函数可定义为:
2.根据下面描述定义完整的日期类:
class Date{
//成员变量
void IneDay();//日期增加1天
int DayCalc()const;//距基准日期的天数
static const int day[];//每月的天数
public:
Date(int y,int m,int d);
Date(int m, int d);
Date();
void SystmDate();//读取系统当前时间
void SetDate(int yy,int mm,int dd);//设置日期
void SetDate(int mm,int dd);
bool IsLeapYear(int yy) const;//是否闰年
bool IsEndofMonth()const ;//是否月末
//重载cout<<,cout>>完成读入和输出日期工作
//重载+,+=,-,-=,++,--,等运算符,完成日期的运算符操作。
//成员函数:判读一个日期是否是系统的当前日期
//实现从键盘读入你的生日,如果是则显示:生日快乐,否则先生还有多少天到生日,或你的生日已经过了多少天,明年生日要再等多少天。
选作,实现:在文件中读入事先写入的亲朋好友的纪念日,系统到时自动提醒。
本题提示:
读取系统时间:
#include
#include
using namespace std;
tm *gm;
time_t t=time(NULL);
gm=gmtime(&t);
int year=1900+gm->tm_year;
int month=gm->tm_mon+1;
int day=gm->tm_mday;
3.定义一个向量(一维数组)类,通过重载运算符实现向量之间的加法和减法。加法用成员函数重载,减法用友元函数重载。
⑴说明
向量用两个量来描述,一个是指向向量的指针,另一个指明向量的元素个数。只有同元素个数的向量才能实现加法和减法。把加法、减法定义为相应元素相加或相减。向量类可定义为:
class Vect{
float *p;
int n;
......
};
⑵要求
增加构造函数、成员函数等,构成完整的程序,并对程序的正确性进行测试。
4为数组类重载下标运算符“[]”、“+”加运算符和“=”赋值运算符。并编写测试程序。
5 定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出.
class rational
{private: long denom,den;
//denom为分子,den为分母
public:
rational(int num=0, int denom=1;
int operator<(rational r) const;
int operator<=(rational r) const;
int operator= =(rational r) const;
int operator!=(rational r) const;
//这里增加赋值和读出函数
}
6 完成一个类,用来描述时间段,包括小时和分钟,重载各种运算符,完成时间段的加减以及赋值。
7 实数矩阵类
按已给出的函数原型为Matrix类重载+,-,* 运算符,以完成正确的矩阵加法,减法,乘法计算,并编写main()函数,用给定的数据进行测试.
#include
class Matrix
{
double *ptr;
int row,col;
public: Array
Matrix(int r,int c)
{
row=r;
col=c;
ptr=new double[row*col];
}
double operator()(int i, int j)
{
return ptr[i*col+j];
}
void set(int i, int j, double value) {
ptr[i*col+j]=value;
}
void print()
{
for(int i=0;i {
for(int j=0;j cout<<(*this)(i,j)<<" "; cout< }
}
Matrix operator+(Matrix m); Matrix operator-(Matrix m); Matrix operator*(Matrix m);
};
测试数据:
矩阵 a 3 3 3
9 -7 4
矩阵 b 11 -2 -3
1 5 1
矩阵 c 1 2
3 4
5 6
求矩阵d = a+b, e = a-b, f= a*c.