c++ 运算符重载

来源:互联网 发布:淘宝商城女童套装 编辑:程序博客网 时间:2024/06/16 17:28

在实际开发中,我们往往需要使用复合的数据类型,而只能针对基本类型的运算符已经不能满足需求。

c++对运算符操作数限制进行了扩展,支持复合数据类型的运算,这种扩展就是运算符重载


其格式为

数据类型 operator<运算符符号>(<参数表>)  {      <函数体>  }  

以下运算符不能重载

1)对象访问运算符    " . "

2)成员指针原算符   " .* "

3)作用域运算符      " :: "

4) " sizeof " 运算符

5) 三目运算符        “ ? ”


合法的运算符重载有四个限制

1) 重载以后的运算符不能改变运算符的优先级和结合性

2)重载以后的运算符不能改变运算符操作数的个数及语法结构

3)重载以后的运算符操作数至少有一个是自定义类型的。

4)重载运算符函数通常不能有默认的参数


array.h#ifndef _ARRAY_H_#define _ARRAY_H_#include<iostream>using namespace std;class Myarray{private:     int *p;int len;public:int name;Myarray();Myarray(int a);~Myarray();void show();friend ostream &operator<<(ostream &o_s,const Myarray &a);friend istream &operator>>(istream &i_s,Myarray &a);Myarray &operator=(Myarray &a);Myarray &operator-(void);Myarray &operator++(void);Myarray &operator++(int);bool operator==(Myarray &a){if(len!=a.len)return false;for(int i=0;i<len;i++){if(p[i]!=a.p[i])return false;}return true;}};#endif

array.cpp#include<iostream>#include"array.h"using namespace std;Myarray::Myarray():len(1){cout<<"no parameter array.len="<<len<<endl;p=new int;*p=1;}Myarray::Myarray(int a):len(a){cout<<"array.len="<<len<<endl;p=new int[len];for(int i=0;i<len;i++){p[i]=i;}}Myarray::~Myarray(){cout<<"这里是"<<name<<"的析构函数"<<endl;for(int i=0;i<len;i++){cout<<p[i]<<"它的地址是"<<&p[i]<<endl;}delete [] p;}void Myarray::show(){for(int i=0;i<len;i++){cout<<p[i]<<endl;}}ostream &operator<<(ostream &o_s,const Myarray &a){    for(int i=0;i<a.len;i++){o_s<<a.p[i]<<endl;}return  o_s;}istream &operator>>(istream &i_s,Myarray &a){cout<<"请输入"<<a.len<<"个数"<<endl;for(int i=0;i<a.len;i++){i_s>>a.p[i];}return i_s;}Myarray &Myarray::operator-(void){const int s=len;    static Myarray d(s);d.name=3;for(int i=0;i<len;i++){d.p[i]=-p[i];}return d;}Myarray &Myarray::operator=(Myarray &a){for(int i=0;i<len;i++){p[i]=a.p[i];}return *this;}Myarray &Myarray::operator++(void)   //++m{for(int i=0;i<len;i++){p[i]++;}return *this;}Myarray &Myarray::operator++(int){static Myarray as;       as.len=len;as.p=new int[len];for(int i=0;i<len;i++){as.p[i]=p[i];}++(*this);return as;}