函数重载与运算符重载.doc_第1页
函数重载与运算符重载.doc_第2页
函数重载与运算符重载.doc_第3页
函数重载与运算符重载.doc_第4页
函数重载与运算符重载.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一实验目的及要求1掌握运算符重载的定义及实现。2掌握具有运算符重载的应用。二实验内容在自己的文件夹下建立一个名为exp6的工程,在该工程中做如下操作:定义一个复数类CComplex,通过重载运算符: *,/,直接实现二个复数之间的乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用成员函数实现重载,除法“/”用友元函数实现重载。两复数相乘的计算公式为:(a+b i)*(c+d i)=(acbd )+(ad+bc) i两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i成员函数有:(1)无参构造函数初始化为原点并输出如下提示” CComplex无参构造函数 ”(2)带两个参数的构造函数并输出如下提示” CComplex带两个参数的构造函数”(3)拷贝构造函数并输入如下提示” CComplex拷贝构造函数”(4)输出函数void print ()(5)加复数对象运算符重载(6)+(分前+和后+)运算符重载(7)乘法*成员函数重载(8)除法/友元函数重载要求:(1)把点类CComplex的声明放在complex.h文件中(2)把点类CComplex成员函数的定义放在complex.cpp文件中(3) 把main函数的部分放在exp6.cpp中并对如上的运算符重载函数分别进行测试。三实验程序及运行结果#include using namespace std;class Arrayprivate:int *elem;int size;/ 数组元素个数public:Array(int a, int sz): elem(a), size(sz) / 构造函数int GetSize() return size; / 返回数组元素个数int &operator(int pos) return elempos - 1; / 重载下标运算符;int main(void)int a = 1, 2, 3, 4, 5;Array obj(a, 5);obj1 = 8;for (int i = 1; i = obj.GetSize(); i+)/ 依次输出数组各元素之值cout obji ;/ 输出第i个元素cout endl;system(PAUSE); return 0; 2.#include using namespace std;class Complexprivate:double realPart;double imagePart;public:Complex(double real = 0, double image = 0): realPart(real), imagePart(image) double GetRealPart() const return realPart; / 返回实部double GetImagePart() const return imagePart; / 返回虚部Complex operator+(const Complex &a) const/ 重载加法运算符+Complex b;b.realPart = this-realPart + a.realPart;/ 和的实部b.imagePart = this-imagePart + a.imagePart;/ 和的虚部return b;int main(void)Complex a(1, 2), b(2, 6), c;/ 定义复数对象c = a + b;cout a= a.GetRealPart() + a.GetImagePart() i endl;/ 显示acout b= b.GetRealPart() + b.GetImagePart() i endl;cout c= c.GetRealPart() + c.GetImagePart() i endl;system(PAUSE); 3.#include using namespace std;class Integerprivate:int val;public:Integer() val = 0; / 无参数的构造函数Integer(int v) val = v; / 带参数的构造函数/15void Show() cout val endl; ;int main(void)Integer a(2), b;a.Show();b.Show();system(PAUSE); return 0; 4.#include using namespace std;/ 日期类class Dateprivate:/ 数据成员:int year;int month;int day;public:Date(int y = 1, int m = 1, int d = 1): year(y), month(m), day(d) void SetYear(int y) year = y; / 设置年 void SetMonth(int m) month = m; void SetDay(int d) day = d; int GetYear() const return year; int GetMonth() const return month; int GetDay() const return day; Date operator+(int days);Date operator-(int days);static bool IsLeapyear(int y);static int GetYearDays(int y);static int GetMonthDays(const Date &d);static int DateToNum(const Date &d);static Date NumToDate(int n);ostream &operator(istream &in, Date &d);/ 日期类及相关函数的实现部分Date Date:operator+(int days)int n = DateToNum(*this) + days;return NumToDate(n);Date Date:operator-(int days)/ 返回当前日期减去天数后得到的日期int n = DateToNum(*this) - days;return NumToDate(n);bool Date:IsLeapyear(int y)/ 判断年份y是否为润年if (y % 4 = 0 & y % 100 != 0 | y % 400 = 0) return true;/ 润年else return false;int Date:GetYearDays(int y)if (IsLeapyear(y) return 366;else return 365;int Date:GetMonthDays(const Date &d)int n;switch (d.GetMonth()case 1:case 3:case 5:case 7:case 8:case 10:case 12:n = 31;break;case 4:case 6:case 9:case 11:n = 31;break;case 2:if (IsLeapyear(d.GetYear() n = 29;else n = 28;return n;int Date:DateToNum(const Date &d)int y, n = 0;for (y = 1; y d.GetYear(); y+)n += GetYearDays(y);for (int m = 1; m GetYearDays(y); y+)rest -= GetYearDays(y);for (m = 1; rest GetMonthDays(Date(y, m, 1); m+)rest -= GetMonthDays(Date(y, m, 1);d = rest;/ 日return Date(y, m, d);ostream &operator(ostream &out, const Date &d)/ 重载输出运算符 out d.GetYear() 年 d.GetMonth() 月 d.GetDay() (istream &in, Date &d)/ 重载输入运算符 int year, month, day;cin year month day;d = Date(year, month, day);return in;/ 返回输入流int main(void)Date d(2008, 8, 18);cout 日期: d endl;cout 日期+10: d + 10 endl;cout 日期-10: d - 10 endl;cout d;cout 日期: d endl;system(PAUSE); return 0; 5.#include using namespace std;class Timeprivate:int hour;int minute;int second;public:Time(int hh = 0, int mm = 0, int ss = 0): hour(hh), minute(mm), second(ss) void SetHour(int hh) hour = hh; void SetMinute(int mm) minute = mm; void SetSecond(int ss) second = ss; int GetHour() const return hour; int GetMinute() const return minute; int GetSecond() const return second; Time operator+(const Time &tm);/ 重载减法运算符-Time operator-(const Time &tm);ostream &operator(istream &in, Time &ym);Time Time:operator+(const Time &tm)int seconds1 = hour * 3600 + minute * 60 + second;/ 当前时间转化为秒数int seconds2 = tm.hour * 3600 + tm.minute * 60 + tm.second;/ 时间tm转化为秒数int seconds = seconds1 + seconds2;/ 秒数相加int hh, mm, ss;hh = seconds / 3600;seconds = seconds % 3600;mm = seconds / 60;ss = seconds % 60;return Time(hh, mm, ss);Time Time:operator-(const Time &tm)int seconds1 = hour * 3600 + minute * 60 + second;int seconds2 = tm.hour * 3600 + tm.minute * 60 + tm.second;int seconds = seconds1 - seconds2;/ 秒数相减int hh, mm, ss;hh = seconds / 3600;seconds = seconds % 3600;mm = seconds / 60;ss = seconds % 60;return Time(hh, mm, ss);ostream &operator(ostream &out, const Time &tm)/ 重载输出运算符 cout tm.GetHour() : tm.GetMinute() : (istream &in, Time &tm)/ 重载输入运算符 int hh, mm, ss;cin hh mm ss;tm = Time(hh, mm, ss);return in;int main(void)Time t1(12, 58, 16), t2(6,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论