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;}
阅读全文
0 0
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- C#:运算符重载
- C++:运算符重载
- zabbix监控tcp连接的状态
- Vsphere日记03.ESXi5.5.client
- Mysql主从不同步的解决方法(本例为mysql5.7)
- 把mysql数据库中的表通过java代码生成实体类
- telnet windows 系统
- c++ 运算符重载
- GIT 常用命令--绝对经典
- Shiro限制帐号只能在一处登录
- native与h5交互
- 1-4 输出菱形
- ESI.ProCAST.2016.0.Suite.Win64
- Android 一次启动多个Activity (TaskStackBuilder)
- Coursera pku C程序进阶 编程题#4:扩号匹配问题
- JSON(发送/接收)