▲基本概念

(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初始化

}

高放的c++学习笔记之重载运算与类型转换的更多相关文章

  1. 高放的c++学习笔记之类

    类的基本思想是数据抽象和封装1.this 成员函数通过一个名为this的额外隐式参数来访问调用它的对象,当我们调用一个函数的时候,用请求该函数的对象的初始化this. 如果某个类的名字为sale,某个 ...

  2. 高放的c++学习笔记之函数基础

    局部变量 函数里面的局部变量有普通的局部变量和局部静态变量两种. 普通局部变量变量就是正常定义在函数体内部的变量,如果返回局部变量的地址,以便于函数调用结束后还继续访问此变量的话,编译器会报warni ...

  3. 高放的python学习笔记之基本语法

    python与c++的不同之处 python的语句块不是用{}括起来的而是冒号后面跟一些与比当前语句多一的tab缩进的语句. 1.定义变量 python的变量类型不需要人为指出,会根据赋值的类型决定此 ...

  4. 高放的c++学习笔记之模板与泛型编程

    函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...

  5. 高放的c++学习笔记之关联容器

    标准库提供8个关联容器 按关键字有序保存有(红黑树实现) set map multset 关键字可重复出现的set multimap  关键字可重复出现的map 无序保存 哈希实现 unorderre ...

  6. 高放的c++学习笔记之lambda表达式

    lambda表达式:可以让代码看起来更整洁,有些结构简单且用的次数少的函数可以用lambda表达式替代, 通常结构是这样的[捕获列表](参数列表){函数部分} 捕获列表: lambda表达式如果在一个 ...

  7. Rancher Server HA的高可用部署实验-学习笔记

    转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...

  8. CNN学习笔记:卷积运算

    CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...

  9. 【c++ Prime 学习笔记】第14章 重载运算与类型转换

    14.1 基本概念 重载的运算符是特殊的函数:名字由关键字operator后接要定义的算符共同组成,也有返回类型.参数列表.函数体. 重载运算符函数的参数量与该算符作用的运算对象数量一样多 除重载调用 ...

随机推荐

  1. codevs 1243 网络提速

    题目描述 Description 某学校的校园网由n(1<=n<=50)台计算机组成,计算机之间由网线相连,如图5.其中顶点代表计算机,边代表网线.正如你所见,不同网线的传输能力不尽相同, ...

  2. iOS文件系统的管理-b

    NSFileManager 判断一个给定路劲是否为文件夹 [self.fileManagerfileExistsAtPath:isDirectory:]; 用于执行一般的文件系统操作 (reading ...

  3. SAE、搜狐云景和百度云之初见

    近期有需求将我们的应用部署到公有云的服务平台上,于是找了几家公有云服务做了一下调研, 首先对比一下他们提供的功能: 功能 SAE 搜狐云景 百度云 版本控制工具 svn  GIT,和百度云的比起来,用 ...

  4. 转:cookie和session(一)——原理

    文章来自于:http://blog.csdn.net/half1/article/details/21645545 一.cookie和session是什么?   cookie是服务器留在客户端中的小文 ...

  5. cf C. Divisible by Seven

    http://codeforces.com/contest/376/problem/C 题意:给你一个大数最多含有10^6个数字,这里面必须含有1,6,8,9,然后重新排列找出一个能被6整除的数. 思 ...

  6. 基于单例使用ThreadLocal对多线程下数据的访问修改

    package cn.lyy.thread; import java.util.Random; /** * 基于单例模式的基础上,使用ThreadLocal为每一个进入的线程生成一个实例, * 用来对 ...

  7. Spring Data Elasticsearch

    项目清单   elasticsearch服务下载包括其中插件和分词   http://download.csdn.net/detail/u014201191/8809619   项目源码   资源文件 ...

  8. COJ 0343 WZJ的公司(二)

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=313 试题描述: WZJ的公司放假了!为了保证假期期间公司的安全,WZJ决定 ...

  9. COJ 3016 WZJ的图论问题

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1046 试题描述: WZJ又有一个问题想问问大家.WZJ用数据生成器生成了一 ...

  10. GOTO (Transact-SQL)

    将执行流更改到标签处. 跳过 GOTO 后面的 Transact-SQL 语句,并从标签位置继续处理. GOTO 语句和标签可在过程.批处理或语句块中的任何位置使用. GOTO 语句可嵌套使用. 语法 ...