基本概念

(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. HID燈是什么及其工作原理

    HID為HighIntensityDischarge的縮寫,即高壓氣體放電燈,它發光的原理是將12V電壓增壓至23000V的超高電壓,激穿填充在石英管的氙氣,使它發光.然后再將電壓轉成85V左右,穩定 ...

  2. Chrome 的 100 个小技巧 中文版

    英文原版<100 Tips For Chrome, Chrome OS and ChromeBook Users>作者博客 - chromestory.com 本文是对<100 Ti ...

  3. oracle number 和sqlserver numeric的区别

    number如果不指定范围默认是可以输入所有位数的小数,numeric如果不指定小数默认是不允许输入小数

  4. Java做acm所需要的基础知识之排序问题

    Java做acm所需要的基础知识. 以前做acm的题都是用C/C++来写代码的,在学习完Java之后突然感觉Java中的方法比C/C++丰富很多,所以就整理一下平时做题需要用到的Java基础知识. 1 ...

  5. Spring MVC之LocaleResolver(解析用户区域)

    为了让web应用程序支持国际化,必须识别每个用户的首选区域,并根据这个区域显示内容. 在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须实现LocaleResolver接口. ...

  6. 两个关于XML解析报错问题小记

    Caused by: org.xml.sax.SAXParseException: The string "--" is not permitted within comments ...

  7. 高仿“点触验证码”做的一个静态Html例子

    先上源码: <html> <head> <title>TouClick - Designed By MrChu</title> <meta htt ...

  8. [Unit Testing] Angular Unit Testing, ui-router, httpbackend and spy

    // backend test beforeEach(inject(function (_$compile_, _$httpBackend_, _$rootScope_, _$state_, _Ann ...

  9. lamp安装指南(转)

    主要软件包, 1. httpd-2.2.6.tar.gz 2. mysql-5.0.45-linux-i686-glibc23.tar.gz ( 这个版本是已编译好的压缩包,解压后稍做配置即可使用 ) ...

  10. Arduino 数码管LED屏驱动

    今天測试数码管LED屏驱动,用某产品的一个共阴极的LED屏,依据电路图做数码管LED屏的检測. 代码写得有些冗长,有好几种驱动的方法,这里仅仅是当中一种最直接的方案,抽出时间要做个更有效率的调用和驱动 ...