运算符重载实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

相关文档
最新文档