C++基础之运算符重载.doc_第1页
C++基础之运算符重载.doc_第2页
C++基础之运算符重载.doc_第3页
C++基础之运算符重载.doc_第4页
C++基础之运算符重载.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

运算符重载输入输出:#include using namespace std;class Empstring name;double salary;public:Emp(string name=,double salary=0):name(name), salary(salary)void show()constcout name , salary endl;/友元函数,不是成员函数friend ostream& operator(istream& is,Emp& e)/也可以直接写进类中return e.salary;/输出运算符函数ostream& operator(ostream& o, const Emp& e)o , e.salary;return o;int main()const Emp e(Daniel, 100000);e.show();/cout.operator(Emp);/operator(cout,e);cout e endl;/cout.operator(e);int x = 10;/cout.operator(int);cout x endl;/cout.operator(x);cout.operator(x).operator(endl);Emp e2;cout (e2),operator(cin,e2)cin e2;cout e2 endl;单目运算符:自加,自减, 、!、-等#include using namespace std;class Personstring name;int age;public:Person(string name=,int age=0):name(name),age(age)Person& operator+()/前加加(成员函数)age+;return *this;/*friend Person& operator+(Person& p)/前加加(有元函数)p.age+;return p;*/const Person operator+(int)/后加加(成员函数)Person old = *this;age+;return old;/*friend const Person operator+(Person&p, int)/后加加(友元函数)Person old = p;p.age+;return old;*/friend ostream& operator(ostream&o,const Person&p)return ,p.age;单目运算符最好使用成员函数const Integer operator()return x;const Integer operator-()return -x;双目运算符:加减乘除。最好使用友元函数#include using namespace std;class Integerint x;public:Integer(int x=0):x(x)friendostream& operator(ostream&o,const Integer&i)return o(istream&is,Integer&i)return isi.x;/*const Integer operator+(const Integer&i)return x+i.x;*/friend const Integer operator+(const Integer&a,const Integer&b)return Integer(a.x+b.x);const Integer operator-(const Integer&i)constreturn x-i.x;friend bool operator(const Integer&a, const Integer&b)return a.xb.x;friend bool operator=(const Integer&a, const Integer&b)return a.x=b.x;赋值运算符:有时调用编译器自己的赋值运算符有错误需自己义#include using namespace std;class Dateint y,m,d;public:Date(int y,int m, int d):y(y),m(m),d(d);class Empstring name;Date* start; 定义了两个类,在第二public: 中调用第一个类作为Emp(string name=,int y=1900,int m=1,int d=1) 成员变量,需用指针:name(name) 此外构造函数,析构start = new Date(y,m,d); 函数都需从新定义。Emp()delete start;Emp(const Emp&e)name = ;start = new Date(*e.start);Emp& operator=(const Emp&e) 定义赋值运算符的基本步骤/*1、判断是否自赋值*/if(this=&e) return *this;/*2、释放自己的空间*/delete start;/*3、创建一个新的空间*/*4、拷贝数据*/start = new Date(*e.start);name = ;/*5、返回当前对象*/return *this;int main()Emp e(Daniel, 1980,2,25);Emp e2;e2 = e;/这 会使最后释放两次堆空间,从而产生错误,但运用自己定义的运符没错。e2 = e2;系统自己写的赋值运算符是这样的:#include using namespace std;class Integerint x;public:Integer(int x=0):x(x)friendostream& operator(ostream&o,const Integer&i)return oi.x;friend const Integer operator+(const Integer&a,const Integer&b)return Integer(a.x+b.x);Integer& operator=(const Integer& i)/系统中的赋值运算符cout operator= endl;x = i.x;return *this;Integer& operator+=(const Integer& i)x += i.x;return *this;类的应用:实现数组功能,而且可以自己编写函数来实现数组没有的更强大的功能。#include using namespace std;class Arrayint* data;int size;int max;public:Array(int x=0):size(0),max(x)data = new intx;bool insert(int x)if(size=max)return false;datasize = x;size+;return true;friend ostream& operator(ostream&o, const Array&a)for(int i=0; ia.size; i+)o a.datai ;return o;/只能定义成成员函数的运算符int& operator(int i)return datai;int& operator(char c)return datac-a;int& operator(double d)return data(int)(d+0.5);int main()Array a(10);/a是数组对象a.insert(10);a.insert(20);a.insert(30);a.insert(40);cout a endl;a0 = 100;/a.operator(0) = 100;a1 = 200;cout a2 endl;cout a endl;aa = 123;ab = 456;cout a endl;a1.2 = 111;a1.8 = 222;a3.4 = 333;cout a endl;不允许被用户重载的运算符n :作用域解析n .成员选择n .*通过到成员的指针做成员选择n ? : 三目运算符n sizeofn typeidn 另外,不允许对基本数据类型进行运算符重载n 不能创造运算符n 也不能违反语法定义的形式,比如,不能将%重载为一元运算 /*错误示例*/#include using namespace std;/不能重载基本数据类型的运算符,不能改变C+中内置类型的运算规则int operator+(int a, int b)return a - b;/不能创造运算符int operato

温馨提示

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

评论

0/150

提交评论