C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++类和对象之运算符重载

C++类和对象之运算符重载解读

作者:zzh_zao

这篇文章主要介绍了C++类和对象之运算符重载,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++ 运算符重载

一、什么是运算符重载?

运算符重载是 C++ 的一种特性,它允许程序员为自定义类型(如类和结构体)重新定义运算符的行为。通过运算符重载,我们可以使用熟悉的运算符语法来操作自定义类型的对象,从而使代码更加简洁、直观。

当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使⽤运算符时,必须转换成调⽤对应运算符重载,若没有对应的运算符重载,则会编译报错。

例如,我们可以为自定义的复数类重载 + 运算符,使得两个复数对象可以直接使用 + 进行相加:

Complex a(1, 2);
Complex b(3, 4);
Complex c = a + b; // 使用重载的 + 运算符

二、运算符重载的语法规则

在 C++ 中,运算符重载通过定义特殊的成员函数或非成员函数来实现。

其基本语法如下:

返回类型 operator运算符(参数列表) {
    // 函数体
}

其中:

注意:

重载<<和>>时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第⼀个形参位置,第⼀个形参位置是左侧运算对象,调⽤时就变成了 对象<<cout,不符合使⽤习惯和可读性。

重载为全局函数把ostream/istream放到第⼀个形参位置就可以了,第⼆个形参位置当类类型对象。

成员函数重载

运算符重载函数可以作为类的成员函数来定义。在这种情况下,函数的参数个数比运算符的操作数少一个,因为第一个操作数是通过 this 指针隐式传递的。

非成员函数重载

运算符重载函数也可以作为非成员函数(全局函数或友元函数)来定义。

在这种情况下,函数的参数个数与运算符的操作数相同。

赋值运算符重载

赋值运算符重载是⼀个默认成员函数,⽤于完成两个已经存在的对象直接的拷⻉赋值,这⾥要注意跟拷⻉构造区分,拷⻉构造⽤于⼀个对象拷⻉初始化给另⼀个要创建的对象。

赋值运算符重载的特点:

拷贝构造:一个存在的对象去初始化另一个要实例化的对象; 赋值重载:已存在的两个对象之间的拷贝,注意返回值为类类型,处理连续赋值的情况

取地址运算符重载

const成员函数

取地址运算符重载

三、可重载的运算符和不可重载的运算符

可重载的运算符

C++ 中大部分运算符都可以被重载,包括:

不可重载的运算符

C++ 中少数运算符不能被重载,包括:

五、运算符重载的注意事项

在使用运算符重载时,需要注意以下几点:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文