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; ...
随机推荐
- 洛谷P1035 级数求和 题解 简单模拟
题目链接:https://www.luogu.com.cn/problem/P1035 题目描述 已知:\(S_n= 1+1/2+1/3+-+1/n\).显然对于任意一个整数 \(k\),当 \(n\ ...
- 对 Redux 一头雾水?看完这篇就懂了
首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...
- webpack4的配置你都掌握了么?
webpack5都出了,webpack4的的基本配置,解析ES6,引入CSS,编译Less,设置image等等,你都会了么? 解析ES6 了解Babel Babel是一个JavaScript编译器, ...
- [技术翻译]Web网页内容是如何影响电池使用寿命的?
本周再来翻译一些技术文章,本次预计翻译三篇文章如下: 04.[译]使用Nuxt生成静态网站(Generate Static Websites with Nuxt) 05.[译]Web网页内容是如何影响 ...
- React框架随笔
React框架随笔 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了 ...
- 欧拉-拉格朗日方程 The Euler-Lagrange Equation
在 paper: Bounded Biharmonic Weights for Real-Time Deformation 中第一次接触到 Euler-Lagrange 方程,简单记录一下. 泛函的定 ...
- 【转】Hive Data Manipulation Language
Hive Data Manipulation Language Hive Data Manipulation Language Loading files into tables Syntax Syn ...
- 6、使用基元类型而不要使用 FCL 类型
基元类型: int string object uint long ulong 等 ; FCL (Framework Class Library ) System.Int32 等. 一些定义在一些语言 ...
- const和volitale
1. const只读变量 const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间(可以通过指针修改) const修饰的全局变量在全局数据区分配空间(指针也修改不了) con ...
- 【PCIE-2】---PCIE配置空间及访问方式简介
对新手来说,第一步了解PCIE的相关基本概念,第二步了解PCIE配置空间,第三步深入研究PCIE设备枚举方式.本章主要总结第二步的PCIE配置空间 按照国际惯例,先提问题: 1. 什么是PCIE的配置 ...