c++中重载运算符
重载运算符
1,成员函数运算符
运算符重载为类的成员函数一般格式如下
<函数类型> operator <运算符> (参数表)
{函数体}
调用成员函数运算符如下
<对象名>. operator <运算符>(参数)
2.友元函数运算符
一般格式:friend <函数类型> operator <运算符> (参数表)
{函数体}
当运算符为类的友元函数时,没有隐含的this指针,通过函数的形参进行传递函数的参数和操作类
一般情况下,单目运算符最好重载为类的成员函数, 双目运算符则最好重载为类的友元函数,=, () , [] , -> 不能重载为类的友元函数。
3重载前置运算符
成员运算符函数形式:ob.operator ++()
友元函数运算符形式:operator ++ (类名 & obj)
重载后置运算符
成员运算符函数形式:ob .operator ++(int)
友元运算符函数形式:operator ++(类名 & obj , int)
(用是否在参数列表中有关键字int,来区分前置还是后置)
4.插入运算符和析取运算符的重载
1)插入运算符重载
对运算符<< 进行重载,能够输出各种标准类型的数据,其原型如下
ostream & operator << (ostream & ,类名 & 对象)
2)析取运算符重载
对运算符>>进行重载,能输出各种类型的数据,其原型如下
istream & operator << (istream &,类名 & 对象)
小结
双目运算符重载为类的成员函数时,函数只显示说明一个参数,该参数是运算符的右操作数
前置单目运算符重载为类的成员函数时,不需要显示说明参数,即函数没有形参。
后置单目运算符重载为类的成员函数时,函数要有一个整形实参。
规则
五个不能重载的运算符 . .* :: sizeof ?:
重载不能改变运算符运算对象的个数
重载不能改变运算符的优先级
重载不能改变运算符的结合性
重载运算符的函数不能有默认参数
重载的的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应该有一个是类对象或类对象的应用。
写了一个小例子如下
例子如下
#include<iostream>
#include<string>
#include<iomanip> using namespace std; class Complex
{
public:
Complex(){
real=; img=;
}
Complex(double r , double i){real = r; img = i;}
Complex operator + (Complex &c1);
Complex operator - (Complex &c1);
void display(); private:
double real;
double img; }; Complex Complex :: operator + (Complex &c1)
{
Complex c;
c.real = real + c1.real;
c.img = img + c1.img;
return c;
} Complex Complex :: operator - (Complex &c1)
{
Complex c;
c.real = real - c1.real;
c.img = img - c1.img;
return c;
} void Complex :: display()
{
cout << "("<< real << ", "<< img << "i)" << endl;
} int main(int argc , char **argv)
{
Complex c(,) , c1(,) ,c2 , c3;
c2 = c + c1;
c3 = c - c1;
cout << "c+c1=";
c2.display();
cout << "c-c1=";
c3.display();
return ;
}
c++中重载运算符的更多相关文章
- 高精度运算略解 在struct中重载运算符
高精度 高精度,即高精度算法,属于处理大数字的数学计算方法.在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字. 重载运算符 运算符重载,就是对已有的运算符重新进行 ...
- 【C++】C++中重载运算符和类型转换
输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...
- c++中有些重载运算符为什么要返回引用
事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...
- C++中的运算符重载
首先思考以下几个问题: 1.什么是运算符重载? 2.为什么要重载运算符,它有什么用? 3.可以重载哪些运算符? 4.重载运算符有哪些规则? 一.基本概念 我们在程序中使用各种操作符,比如加(+).赋值 ...
- C++中的运算符重载注意事项
1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...
- C++中输出流运算符的重载
cout是ostream类的对象,cin是istream类的对象. 我们平时用的cout<<就相当于cout.operator<<(...).也就是说正常使用(不对operat ...
- C++中,用类和重载运算符写高精模板
先放代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; s ...
- C++中的运算符重载练习题
1.RMB类 要求: 定义一个RMB类 Money,包含元.角.分三个数据成员,友元函数重载运算符‘+’(加) 和 ‘-’(减),实现货币的加减运算 例如: 请输入元.角 分: ...
- 结构体作为map的key或放入set中,需要重载<运算符
结构体作为map的key或放入set中,需要重载<运算符,如下: typedef struct tagRoadKey{ int m_i32Type; int m_i32Scale; ...
随机推荐
- Springboot 添加热部署
Pom 文件 添加依赖 添加插件 修改idea ,启动自动部署 <!--配置热部署--> <dependency> <groupId>org.springframe ...
- 7.netty内存管理-ByteBuf
ByteBuf ByteBuf是什么 ByteBuf重要API read.write.set.skipBytes mark和reset duplicate.slice.copy retain.rele ...
- 利用log4net创建日志文件时过滤日志,这是坑还是?
前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...
- 6.python在windows下用批处理文件在运行中输入程序名直接运行的方法
最近由于平时自由时间比较多,在看一本python入门书籍,在里面学习了一种用windows下的批处理文件在电脑运行界面中直接输入程序名称就可运行的方法,现将其详细说明如下: 1.首先编写一个教程上的程 ...
- Go数组和切片你不知道的区别
开篇语 数组和切片是两种不同的数据结构,比较常见,在Go语言中同时存在,今天我们就一起来看看他们在使用方式上,原理上的一些区别? 数组 在Go语言中,数组是一种具有相同类型固定大小的一种数据结构. 我 ...
- 基于Antd框架的通信与交互
基于Antd框架的通信与交互 1.与用户交互 对于input输入框,在于用户交互的过程中,用户在输入任何东西时,都会引起该组件的onChange事件(如果写有这个方法的话). <FormItem ...
- 2017CCPC杭州(ABCDJ)
所有的题目在这里<--- 待补... Problem A. HDU6264:Super-palindrome 题意: 题目定义了一个超级回文串,这个串满足:它的任一奇数长度的串都是回文串. 现在 ...
- 【转】线性插值(Linear Interpolation)基本原理
转:https://blog.csdn.net/u010312937/article/details/82055431 今天在阅读大牛代码的时候,发现了Linear Interpolation一次,百 ...
- Js 数组按数量分部!
使用 reduce 将数组分为几个部分,每个部分最多10个! 相比其他语言使用 js 实现这个逻辑非常的简单方便! var group = function (source, step) { if ...
- qiniuLive 连麦流程介绍
本文出自APICloud官方论坛 qiniuLive 封装了七牛直播云服务平台的移动端开放 SDK.该模块包括视频流采集和视频流播放两部分 iOS连麦流程图: Android连麦流程图: 以下部分代码 ...