上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑

首先看一下常见的重载原型

  • +-*/%^&|~  原型:const T operatorX(const T& l, const T& r) const; //注意:返回值是const T 新对象不是引用,而且不能当左值(a+b=3  这是不被允许的)
  • !&&||< <= == >= >  原型:bool operatorX(const T& l, const T& r) const;  //关系型运算符 返回值是bool
  • []  原型:T& T::operator[](int index);
  • ++ --比较复杂,原型在下面

++ --运算符重载:

//原型及部分实现
class Integer
{
public:
...
const Integer& operator++(); //++a 返回值为a+1
const Integer operator++(int); //a++ 返回值为a 然后a=a+1 注意:返回值不是引用而是新的对象
const Integer& operator--(); //--a 返回值为a-1
const Integer operator--(int); //a-- 返回值为a
}; //定义(实现)
const Integer& Integer::operator++()
{
*this += 1;
return *this;
} const Integer Integer::operator++(int)
{
Interger old(*this); //拷贝构造
++(*this);
return old;
}

[]运算符 ,最明显的例子就是vector,重载后的vector就可以进行扩展

class Vector //为了防止编译冲突我们改一下名字,第一个字母大写好了
{
public:
Vector(int size):m_size(size)
{
m_array = new int[size];
}
~Vector() { delete m_array; }
int& operator[](int index) { return m_array[index]; }
private:
int m_size;
int *m_array;
}

= 赋值运算符,这个也较复杂:复杂在哪呢,类之间的赋值有两种 一种是拷贝构造函数 一种是直接赋值

//=运算符重载原型定义
T& T::operator=(const T& rhs)
{
//check for self assignment
if( this!= &rhs)
{
//preform assignment
}
return *this;
}
MyType b;  //b走构造
MyType a=b; //a走拷贝构造 拷贝构造不能重载
a=b; //直接赋值 赋值可以被重载

看个=重载例子:

#include <iostream>
using namespace std;
class Cargo
{
public:
Cargo& operator=(const Cargo& rhs)
{
cout << "inside Cargo::operator=()" << endl;
if(this != &rhs)
{ cout << "处理不等问题"<< endl; }
return *this;
}
};
class Truck
{
Cargo b;
};
int main()
{
Cargo a; //默认构造函数
Cargo b=a; //b对象实例化走的 拷贝构造函数
b=a; //=重载
Truck c,d;
c = d; //=重载
return 0;
}

目录

  1. c++(翁恺浙大公开课) 笔记0
  2. static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)
  3. c++对象初始化(翁恺c++公开课[10])
  4. c++构造函数的初始化列表(翁恺c++公开课[13])
  5. c++继承:公有、私有、保护
  6. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
  7. c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
  8. c++多态性及多态的内部实现(翁恺c++公开课[23-24])
  9. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
  10. c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
  11. c++模板(翁恺c++公开课[34-35]学习笔记)
  12. 最好不要在头文件中写函数定义

c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)的更多相关文章

  1. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

    运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...

  2. c++中的Exceptions异常处理(翁恺c++公开课[36])

    Exceptions用于处理Run-time Error: //文件读取的异常捕获伪代码 try{ open the file; determine its size; allocate that m ...

  3. static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)

    static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...

  4. c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)

    这节课在p26.拷贝构造中讲的很清楚,建议大家耐心的去看下. 什么时候会发生拷贝构造: 对象之间的初始化赋值 使用对象作为变量进行函数传参(通常使用引用来传参从而减去不必要的拷贝构造,提高效率和代码健 ...

  5. c++多态性及多态的内部实现(翁恺c++公开课[23-24])

    多态是在父类函数的前面加上 “virtual” 关键字,使子类与父类同名的函数产生一种联系: 多态会用到两个特性:向上造型.动态绑定 向上造型是指:拿一个子类对象当作父类来看待,比如下边代码中的子类E ...

  6. c++构造函数的初始化列表(翁恺c++公开课[13])

    初始化列表形式: class Point { private: const float x,y; Point(float xa = 0.0, flato ya = 0.0):y(ya),x(xa) { ...

  7. c++对象初始化(翁恺c++公开课[10])

    c++对象初始化 就是去调用构造函数来完成初始化操作: 构造函数有无参数的构造函数.有参数构造函数.默认构造函数(编译器给我们实现的)...(拷贝构造函数之后说) 注意:默认构造函数只有在我们自己没有 ...

  8. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)

    关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...

  9. c++模板(翁恺c++公开课[34-35]学习笔记)

    为什么要有模板(templates):当我们需要一个列表(list),列表中元素可能都为X类型也可能都为Y类型,怎么来实现呢? 定义基类?可以实现,很多情况下可能不够简明的表达设计思想 克隆代码(写一 ...

随机推荐

  1. Mount命令的参数详解

    导读 mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了. 挂接命令(mount) 首先,介绍 ...

  2. 关于原生,webapp,hybird(混合)

    链接:https://www.jianshu.com/p/839748d571b2 链接2:https://www.jianshu.com/p/6d5f32aa5dda

  3. pandas库笔记

    本笔记为自学笔记 1.pandas.DataFrame() 一种保存矩阵的数据格式 grades_df = pd.DataFrame( data={'exam1': [43, 81, 78, 75, ...

  4. 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示

    #K-NN分类 import os import sys import time import operator import cx_Oracle import numpy as np import ...

  5. 看 C++ Primer 的58页, 讲拷贝时不能忽略 底层const这里的说的原因有点牵强, 这里给出自己的理解

    extern const  int ci =42; const int * p2  = &ci; extern const  int *const p3= p2; int *p= p3;   ...

  6. Codeforces Round #601 (Div. 2)D(蛇形模拟)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; vector<char>an ...

  7. Hadoop学习笔记(三):分布式文件系统的写和读流程

    写流程:怎么将文件切割成块,上传到服务器 读流程:怎么从不同的服务器来读取数据块 写流程 图一 图二 写的过程中:NameNode会给块分配存储块的位置,每次想要存储文件的时候都会在NameNode创 ...

  8. 连接数据库报错Access denied for user 'root'@'localhost' (using password:YES)

    报错信息为:pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using pa ...

  9. C语言:找出一个大于给定整数m且紧随m的素数,-求出能整除x且不是偶数的数的个数,

    //函数fun功能:找出一个大于给定整数m且紧随m的素数,并作为函数值返回. #include <stdlib.h> #include <conio.h> #include & ...

  10. idea新建maven project工程

    1.new project: 2.新建在main 下新建 java directory 并mark as  source root,这里我已经makr过java目录所以以showfor做演示: 3.新 ...