C++程序设计实验6_第1页
C++程序设计实验6_第2页
C++程序设计实验6_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、实验6运算符重载实验目的掌握运算符重载的规则;掌握运算符成员函数与运算符友元函数的实现及应用;学会定义类中单目和双目运算符的重载函数;理解重载运算符的作用,学会对典型的运算符进行重载。实验学时本次实验需要2个学时。实验要求实验上机之前,根据实验内容要求,自行设计编写程序,完成预习报告。 实验上机时调试并修正程序。当次上机结束前分析错误原因并给出实验结论,提交实验报告。实验内容1.基础部分(1) 定义复数类complex,包括私有数据成员实部real和虚部images定义该 类的构造,拷贝构造,析构函数。为该类重载运算符 +,-(友元函数),前置和 后置+,-(成员函数),插入符和提取符 , (

2、友元函数)。在main函数里 定义复数对象,测试重载的这些运算符。2进阶部分(2)设计一个 mystring类,包括数据成员 char * pstr;和int length;通过运算 符重载实现字符串的输入 、输出 、连接+=、赋值=、关系运算(=、!=、 )、下标等运算。/* (1)定义复数类complex,包括私有数据成员实部 real和虚部image。定义该类的构造, 拷贝构造,析构函数。为该类重载运算符 +,-(友元函数),前置和后置+,-(成员函数),插入符和提取符 , (友元函数)。在main函数里定义复数对象,测试重载的这些运算符。#in clude<iostream>

3、;#in clude<stri ng>using n amespace std;class Complex public:Complex(i nt real1=O,i nt image1=0) :real(real1),image(image1)Complex() ;friend Complex operator+(c onst Complex &a1, const Complex &a2);friend Complex operator-(c onst Complex &a1, const Complex &a2);Complex operator

4、+();Complex operator+(i nt);Complex operator-。;Complex operator-(i nt);friend ostream& operator<<(ostream& os, const Complex&a3);friend istream& operator>>(istrea m& is.Complex&a3);private:int real;int image;Complex operator+(c onst Complex &a1, const Complex

5、&a2)retur n Complex(a1.real + a2.real, a1.image + a2.image);Complex operator-(c onst Complex &a1, const Complex &a2)return Complex(a1.real - a2.real, a1.image - a2.image);Complex Complex:operator+()+real;+image;return *this;Complex Complex:operator+(i nt)Complex a = *this;+(*this);return

6、 a;Complex Complex:operator-() -real;-image;return *this;Complex Complex:operator-(i nt)Complex a = *this;-(*this);return *this;ostream& operator<<(ostrea m& os, const Complex& a3)os<< a3.real << "+" << a3.image << "i"return os;istrea m&a

7、mp; operator»(istream& is, Complex&a3)is >> a3.real >> a3.image;return is;int mai n()Complex a4(4,5), a5(6,7),A,B;cout << "a4:" << a4 << en dl;cout << "a5:" << a5 << en dl;cout << "请重新为a4,a5对象输入数据:”;cin >&

8、gt; a4;cin >> a5;cout << "重新输入后 a4: " << a4 << endl;cout << "重新输入后 a5: " << a5 << endl;A = a4 + a5;cout << "重载修改后加法 A:"cout << A << en dl;A = a4 - a5;cout << "重载修改后减法 A:"cout << A <<

9、 en dl;cout <<"重载修改后 a4 前置 +:"<<+a4 << endl;cout <<"重载修改后 a5 后置 +:" <<a5+ << endl;cout << "重载修改后再次修改的a4前置-:"<< -a4 << endl;cout << "重载修改后再次修改的a5后置-:"<< a5- << endl;return 0;(2)设计一个 mystrin

10、g类,包括数据成员char * pstr;和int length;通过运算符重载实现字符串的输入>>、输出 <<、连接+=、赋值=、关系运算(=、!=、>、< )、下标等运算。#i nclude <iostream>#in clude <stri ng>using n amespace std;class mystri ngpublic:mystri ng(char *p);mystri ng()free(pstr);mystri ng& operator=(mystri ng& s);void operator+=(

11、mystri ng & a)this->pstr = (char*)realloc(this->pstr, this->le ngth + a.len gth + 1); strcpy(this->pstr + (this->length), a.pstr);char& operator (i nt n);bool operator =(c onst mystri ng & s)if (strcmp(this->pstr, s.pstr) = 0)return 1;elsereturn 0;bool operator !=(c ons

12、t mystri ng & s)if (strcmp(this->pstr, s.pstr) != 0)return 1;elsereturn 0;bool operator <(c onst mystri ng & s)if (strcmp(this->pstr, s.pstr)<0)return 1;elsereturn 0;bool operator >(c onst mystri ng & s)if (strcmp(this->pstr, s.pstr)>0) return 1;elsereturn 0;friend o

13、stream & operator <<(ostream & os, const mystring & s) return os << s.pstr << strle n(s.pstr); friend istream & operator >>(istream & is, mystri ng & s)delete s.pstr;is >>s .len gth ;s.pstr = new chars .len gth + 1;is >> s.pstr;*(s.pstr + s

14、.le ngth) = '0:return is;private:char *pstr;int len gth;mystri ng:mystri ng(char *p)this->pstr = (char*)malloc(strle n(p) + 1); strcpy(this->pstr, p);this->le ngth = strle n(p);mystri ng& mystri ng: operator =(mystri ng & s)deletepstr; this->pstr = new charstrle n( s.pstr) +

15、1; if (pstr)strcpy(this->pstr, s.pstr); return *this;char& mystri ng:operator(i nt n)static char ch = 0;if (n > length | n < 0)cout << "数组越界"<< endl; return ch;elsereturn *(pstr + n);int mai n()mystring a("abde"), b("defe");/mystri ng c(a);/cout

16、 << c;cout << a << "" << b << en dl;a = b;cout << a << en dl;a += b;cout << a << en dl;cin >> a;cout << a << en dl;if (a > b)cout << "a 字符串更大:"<< a << endl;if (a < b)cout << "b 字符串更大:"<< b << endl;if (a = b)cout << "a,b 相等"<< a << endl;if (a != b)cout << "a,b 不相等"<< endl;a1 = ' q'cout << a << en dl;实验心得:本次实验我们所学习的是函数的重载,函数 的重载是为了满足不同环境下调用函数不同的问题。比如求 最大值,我们三个值求最大值,两个值求更大值。在这里运 用

温馨提示

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

评论

0/150

提交评论