基本概念

(1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成。、

(2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数。

(3)我们只能重载已有的运算符,而无权发明新的运算符

调用重载的运算符函数
类外的重载运算符

a+b等同于operator+(a,b)

类内的重载运算符a+b等同于a.operator+(b);

class gaofang{
public :

  int x, y;
  int operator+ (gaofang& b)const{
  return x+y+b.x+b.y;
}
};
int operator-(gaofang a, gaofang b){
  return a.x + a.y - b.x - b.y;
}
int main(){
  gaofang a, b;
  printf("%d %d\n", a+b, a.operator+(b));
  printf("%d %d\n", a-b, operator-(a, b));

  return 0;
}

重载函数作为成员或非成员

将重载函数在成员函数与非成员函数之间的选择上通常遵循如下几点

(1)赋值(=),下标([]),调用(()),和成员访问箭头(->)运算符必须是成员

(2)复合赋值运算符一般来说应该是成员,但并非必须。

(3)改变对象状态的运算符通常应该是成员。

(4)具有对称性的运算符通常应该定义成非成员函数。

例如

string s = "world";

s = s+"hello";      //正确

s = "hello" + s;       //如果+是成员函数,则错误

▲重载输入输出运算符

输入输出运算符必须是非成员函数。

⊙重载输出运算符

通常情况下,输出运算符的第一个形参是一个非常量ostream对象的引用,之所以是非常量是因为向流中写入内容会改变流的状态,引用是因为我们无法直接复制一个ostream对象。

第二个形参一般是一个常量的引用,打印不会改变该对象的内容。

⊙重载输入运算符

与输出运算符不同的是,第二个参数必须是一个非常量的引用,因为是向一个类里面输入。

例子

istream &operator>>(istream &is, gaofang &a){

is >> a.x >> a.y;

return is;

if(!is) a.x = 1, a.y = 0;      //当输入错误的时候将a初始化

}

最新文章

  1. 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象
  2. BZOJ3160: 万径人踪灭
  3. C#_WinForm接收命令行参数
  4. (3)VS2010+Opencv-2.4.8的配置攻略
  5. phpmailer使用163邮件发送邮件例子
  6. iOS8定位问题
  7. 菜鸟日记之 java中的集合框架
  8. Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.(转)
  9. 实现android4.4新特性:沉浸式状态栏
  10. 转 C#中静态方法与非静态方法区别比较
  11. 看得懂的区块链,看不清的ICO人心
  12. eclipse配置tomcat添加外部项目
  13. 【Spring】21、用spring目标对象处理Transaction rolled back because it has been marked as rollback-only
  14. week06 09 NodeJS Server as a RPCclient - jayson
  15. Dream------hive on spark
  16. CentOS 7解压安装PHP7.1.21
  17. Android 程序打包及签名(转)
  18. Spring boot with Apache Hive
  19. BloomFilter
  20. centos安装openssl

热门文章

  1. An unspecified error occurred!
  2. Hazelcase 简介
  3. Java文件末尾追加字符串
  4. 转:Stimulsoft Reports.Fx 2013.3新增 Email、AutoPageScale支持以及图表组件Funnel Weighted Slices
  5. 【HDOJ】1506 Largest Rectangle in a Histogram
  6. POJ1159 Palindrome(dp)
  7. (转载)PHP使用header函数设置HTTP头的示例方法表头
  8. Spring 整合 Tibco EMS
  9. 《火球——UML大战需求分析》(第1章 大话UML)——1.4 如何学好UML?
  10. ViewPager 详解(五)-----使用Fragment实现ViewPager滑动