目录

1, 运算符重载
2, 赋值运算符的重载
3, 流插入运算符重载
4,自加/自减运算符的重载

运算符重载

作用:对抽象数据类型也能够直接使用C++提供的运算符。
使得程序更简洁。
代码更容易理解。

运算符重载的实质是函数重载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
返回值类型 operator运算符 (形参表)
{
...
}
class Complex
{
public:
Complex(double r = 0.0, double i = 0.0);
Complex operator+(const Complex c1);
Complex operator-(const Complex c1);
double real;
double imag;
};
Complex::Complex(double r, double i)
{
real = r;
imag = i;
}
Complex Complex::operator+(const Complex c1)
{
return Complex(real + c1.real, imag + c1.imag);
}
Complex Complex::operator-(const Complex c1)
{
return Complex(this->real - c1.real, this->imag - c1.imag);
}
//普通类型的运算符重载
Complex operator+ (const Complex c1, const Complex c2)
{
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}

运算符可以重载成普通函数,也能重载为成员函数。前者的参数个数就是对应操作符的目数,而成员函数则是目数减一。

赋值运算符的重载

1,赋值运算符两边的类型可以不匹配。
如:将一个Int类型的变量赋值给一个Complex对象。
2,对一个自己写的类想要进行 = 赋值时,需要重载赋值运算符”=”
3,赋值运算符“=”只能重载为成员函数
一般来说,赋值运算符的重载的返回值是该对象本身的引用,来满足=的意义。

流插入运算符重载

cout本身就是ostream的一个对象,而cout<<其实是在ostream类中对<<进行了重载。
我们如果想通过<< >>来实现自己对应的对象的输入和输出,则可以自己来重载这两个运算符。
一般定义为全局函数,因为iostream类C++已经写好了。
比如实现对复数类的输入输出:

1
2
大专栏  C++程序设计--运算符重载class="line">3
4
5
6
7
8
9
10
11
ostream& operator<<(ostream& o, Complex& c)
{
o << c.real << "+" << c.imag << "i";
return o;
}
istream& operator>>(istream& i, Complex& c)
{
//先读进string里面再分别剥离出real imag
return i;
}

自加/自减运算符的重载

前置和后置有区别,
前置是一元运算符,后置是二元运算符。多出来的一个参数具体是啥无意义,只是为了标记这是一个后置运算符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class CDemo
{
public:
CDemo(int _n) :n(_n){};
CDemo operator++();
CDemo operator++(int);
//强制类型转化
operator int(){ return n; }
friend CDemo operator--(CDemo&);
friend CDemo operator--(CDemo&, int);
private:
int n;
};
//前置
CDemo CDemo::operator++()
{
n++;
return *this;
}
CDemo operator--(CDemo& d)
{
d.n--;
return d;
}
//后置
CDemo CDemo::operator++(int)
{
CDemo temp (*this);
n++;
return temp;
}
CDemo operator--(CDemo& d, int)
{
CDemo t = d;
d.n--;
return t;
}

注意:上面的demo中int作为一个类型强制转换运算符被重载,Demo s; (int)s等效于s.int()。
类型强制转换运算符被重载时,不能写返回值类型,实际上其返回值就是类型转换所代表的类型。

Tips:
1,C++不允许定义新的运算符。
2,重载后的运算符应该符合日常习惯。
3,重载运算符不能改变运算符的优先级。
4,以下运算符不能被重载。”.” “*” “::” “?”,sizeof
5,重载运算符(), [], ->或者赋值运算符时,只能被声明为类的成员函数。

C++程序设计--运算符重载的更多相关文章

  1. sdut 面向对象程序设计上机练习十(运算符重载)

    面向对象程序设计上机练习十(运算符重载) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 定义一个复数类Complex,重载运算符"+" ...

  2. 04737_C++程序设计_第9章_运算符重载及流类库

    例9.1 完整实现str类的例子. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...

  3. C++程序设计方法3:数组下标运算符重载

    数组下标运算符重载 函数声明形式 返回类型operator[](参数): 如果返回类型是引用,则数组运算符调用可以出现在等式的左边,接受赋值,即: Obj[index] = value; 如果返回类型 ...

  4. 新标准C++程序设计读书笔记_运算符重载

    形式 返回值类型 operator 运算符(形参表) { …… } 运算符重载 (1)运算符重载的实质是函数重载(2)可以重载为普通函数,也可以重载为成员函数 class Complex { publ ...

  5. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  6. C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...

  7. C++学习之路—运算符重载(一)概念、方法及规则

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1    什么是运算符重载 先来说下什么是重载吧 ...

  8. c++入门之—运算符重载和友元函数

    运算符重载的意义是:将常见的运算符重载出其他的含义:比如将*重载出指针的含义,将<<与cout联合使用重载出输出的含义,但需要认识到的问题是:运算符的重载:本质仍然是成员函数,即你可以认为 ...

  9. C/C++对Lu系统内置动态对象进行运算符重载

    欢迎访问Lu程序设计 C/C++对Lu系统内置动态对象进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32. ...

随机推荐

  1. tensorflow(五)

    一.单机编程框架 单机程序是指启动和运行都在一台机器的一个进程中完成,因为没有网络开销,非常适合参数不多.计算量小的模型. 步骤,创建单机数据流图,创建并运行单机会话. saver = tf.trai ...

  2. linux版本neo4j安装配置教程

    https://blog.csdn.net/weixin_44293236/article/details/89467489

  3. Opencv笔记(二):图像的基本操作——续写

    1.图像的透视变换 对于视角变换,我们需要一个 3x3 变换矩阵.在变换前后直线还是直线.要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置.这四个点中的任意三个都不能 ...

  4. 《VSTO开发入门教程》配套资源下载

    <VSTO开发入门教程> 刘永富 著 清华大学出版社 封面截图 购书网址 京东网 淘宝网 配套资源到如下页面寻找: https://www.cnblogs.com/ryueifu-VBA/ ...

  5. mediawiki资料

    1.如何通过ip访问mediawiki --- http://blog.sina.com.cn/s/blog_3f2a2b8e01000awx.html 发布到外部网络,更改htfp.config里面 ...

  6. Z变换解差分方程的思考

    问题描述 今日碰到一道差分方程的题目,如下 [ y(n + 2) - cfrac{7}{10}y(n + 1) + cfrac{1}{10}y(n) = 7x(n+2) -2 x(n + 1) ] 已 ...

  7. LIS 问题

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...

  8. python之接口自动化测试框架

    梳理python+unittest接口自动化测试框架的思路: 1.确定目录: cases:存放测试用例的py文件:config:存放一些数据库,环境地址等固定不变的信息: core:核心的文件, ca ...

  9. 让java不再难懂

    废话不都说,直接上图哈 java基础思维导图整理.png 1.Java 简介.png 2.java主要特性.png 3.java发展历史.png 4.java 开发环境配置.png 5.java 基础 ...

  10. CentOS-SendMail服务

    title date tags layout music-id CentOS6.5 SendMail服务安装与配置 2018-09-04 Centos6.5服务器搭建 post 456272749 一 ...