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; ...
随机推荐
- MapReduce-自动化运行配置
1.打包时指定main Class信息 注意:默认直接通过maven插件打成jar包中没有指定main class信息,因此在运行mapreduce的jar包时必须在指令后明确main class信 ...
- 调试排错 - Java问题排查:Linux命令
本文原创,更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查.@pdai 文本操作 文本查找 - grep g ...
- C#操作注册表(简单方便,兼容X32和X64)
C#操作注册表(简单方便,兼容X32和X64) 大家好,我在这里给大家介绍本人实现的操作注册表的类,简单方便,兼容32位系统和64位系统. 一般大家用C#操作注册的方法是使用命名空间Microsoft ...
- MinIO 搭建使用
MinIO简介¶ MinIO 是一款基于Go语言的高性能对象存储服务,在Github上已有19K+Star.它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据, ...
- Python使用requests爬取一个网页并保存
#导入 requests模块import requests #设置请求头,让网站监测是浏览器 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6. ...
- 【Java编程思想阅读笔记】Java数据存储位置
Java数据存储位置 P46页有感 一.前置知识 栈是由系统自动分配的,Java程序员对栈没有直接的操作权限, 堆是所有线程共享的内存区域,栈 是每个线程独享的. 堆是由程序员自己申请的,在使用new ...
- 浏览器应用集成嵌入WPS指南
因为该WPS插件使用NPAPI机制来和浏览器交互,故要求使用插件的浏览器必须支持NPAPI机制且必须开启NPAPI机制. 以下是支持的常见的浏览器及其版本: FireFox浏览器52及小于52的版本( ...
- 田忌赛马 - dp
Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high ...
- [bzoj3244] [洛谷P1232] [Noi2013] 树的计数
Description 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的DFS序以及BFS序.两棵不同的树的DFS序有可能相同,并且它们的BFS序也有可能相同, ...
- 记第一场cf比赛(Codeforces915)
比赛感想 本来21:05开始的比赛,结果记成21:30了...晚了25分钟才开始[捂脸] 这次是Educational Round,所以还比较简单. 前两道题一眼看去模拟+贪心,怕错仔细看了好几遍题, ...