目录
一、原理和机制
二、双目运算符的重载
三、隐式转换
四、单目运算符的重载
五、运算符重载的限制
六、特殊运算符的重载
1.数组对象
2.强转和函数对象
3.指针对象
一、原理和机制C++中运算符只支持基本数据类型运算,如果需要运算符支持类类型的运算,需要使用C++提供的语法:运算符的重载。
函数原型:返回值 operator运算符(参数列表)
①运算符重载函数也具有自己的返回值类型,函数名字以及参数列表。其返回值类型和参数列表与普通函数类似。
②运算符重载函数名为:关键字operator后面接需要重载的操作符符号。
运算符的重载本质上是通过函数来实现的,将类类型数据的运算过程写成一个特殊的函数,当该类型的对象遇到这种运算时自动调用该函数来完成运算过程。
实现运算符重载的函数既可以是成员函数,也可以是全局函数。
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以像内置类型一样可以直接使用运算符进行操作。
d1 == d2;// 可读性高(书写简单) IsSame(d1, d2);// 可读性差(书写麻烦)
二、双目运算符的重载①通过成员函数重载(以加法为例)
成员函数加法的重载:
本类类型 operator+(第二操作数)
{
...
}
双目运算符需要传入两个操作数,第一操作数就是调用该函数的对象,而第二个操作数则以参数列表的形式传入。
②通过全局函数重载(以加法为例)
全局函数加法的重载:
操作数的类型 operator+(第一操作数,第二操作数)
{
...
}
由于这里是在类外使用全局函数访问类中的成员,可能类外重载无法访问类中的成员,可以使用以下方法
1.直接将成员设置为公有(不推荐)
2.使用友元,将全局函数设置为友元函数(推荐)
3.为私有成员提供访问接口
构造一个类表示分数,实现类分数的基本运算
//分数
class Fraction{
public:
Fraction(int x=0,int y=1):x(x),y(y){}
//打印
void print()
{
couty*fb.y/*分母*/);
}
//== > +=
bool operator==(const Fraction &fb)
{
return this->x*fb.y == this->y*fb.x;
}
bool operator>(const Fraction &fb)
{
return this->x*fb.y > this->y*fb.x;
}
Fraction& operator+=(const Fraction &fb)
{
this->x = this->x*fb.y+fb.x*this->y;
this->y = this->y*fb.y;
return *this;
}
//友元函数
friend Fraction operator+(const Fraction &fa, const Fraction &fb);
friend Fraction operator*(const Fraction &fa, const Fraction &fb);
friend Fraction operator/(const Fraction &fa, const Fraction &fb);
friend istream& operator>>(istream &is, Fraction &fb);
friend ostream& operator(istream &is, Fraction &fb)
{
return is>>fb.x>>fb.y;
}
ostream& operator
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?