41重载运算符的规则

简介: 41重载运算符的规则

C++入门——60s从0到1

重载运算符的规则

 

C++语言的运算符重载特性为开发者提供了很大的灵活性,但是也存在一些规则需要遵守。

 

运算符重载必须是成员函数

 

运算符重载必须作为类的成员函数进行定义。这意味着运算符重载必须被定义在类的定义中,而不能定义在全局作用域中。这是为了保证运算符重载的封装性和安全性而做出的规定。

 

重载运算符必须是单目或双目运算符

 

运算符重载可以是单目运算符(如 `+`、`-`、`*`、`/` 等)或双目运算符(如 `+=`、`-=`、`*=`、`/=` 等)。这是为了保持运算符重载的一致性和可读性而做出的规定。

 

必须通过函数重载实现运算符重载

 

运算符重载必须通过函数重载来实现。具体来说,开发者需要在类中定义一个新的函数来代替原有的运算符,并使用该函数来实现相应的功能。例如,要重载 `+` 运算符,开发者需要定义一个新的函数 `operator+()`,并在其中实现相应的功能。

 

返回类型和参数列表必须与运算符匹配

 

在进行运算符重载时,返回类型和参数列表必须与原有的运算符匹配。例如,如果要重载 `+` 运算符,那么该运算符的返回类型应该是与操作数类型相同的类型,并且参数列表应该有两个操作数。这是为了保持语言的一致性和可读性而做出的规定。

 

不能改变运算符的含义和优先级顺序

 

在进行运算符重载时不能改变原有的运算符的含义和优先级顺序。也就是说,如果原有的某个运算符需要两个操作数(如乘法),那么在重载这个运算符时也需要接受两个操作数;如果原有的某个运算符具有固定的优先级顺序(如加法和减法的优先级相同),那么在重载这个运算符时也应该保持这个顺序不变。这是为了保持语言的一致性和可读性而做出的规定。

 

运算符重载应该是可见的

 

在进行运算符重载时应该将新的函数定义为 `public` 成员函数或将其声明为友元函数。这是为了保证运算符重载的可见性和正确性而做出的规定。如果将新的函数定义为 `private` 成员函数,则在类的外部是无法调用该函数的;如果将其声明为友元函数,则可以访问类的私有成员变量和成员函数

 

总结

 

C++语言的运算符重载特性为开发者提供了很大的灵活性来定义自定义类型的行为方式,但是也存在一些规则需要遵守。开发者需要仔细考虑这些规则以避免出现不必要的问题和错误。同时,也需要遵循已有的编程约定和习惯用法以提高代码的可读性和可维护性。

 

目录
相关文章
|
8月前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
8月前
|
C语言
【C语言基础篇】数组传参规则详解
【C语言基础篇】数组传参规则详解
|
8月前
|
编译器
模板初阶(2):函数模板的匹配原则,类模板的实例化
模板初阶(2):函数模板的匹配原则,类模板的实例化
|
9月前
|
C语言 C++
C++|运算符重载(2)|运算符重载的方法与规则
C++|运算符重载(2)|运算符重载的方法与规则
|
9月前
|
编译器 C++ 索引
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
|
编译器 C语言
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
|
索引
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
|
人工智能 编译器 程序员
C++11之decltype类型推导(使用场景、推导四规则、cv限定符)
C++11之decltype类型推导(使用场景、推导四规则、cv限定符)
345 0
|
存储 C语言
C语言编程—作用域规则
任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中 让我们来看看什么是局部变量、全局变量和形式参数。 局部变量 在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,所有的变量 a、b 和 c 是 main() 函数的局部变量。 #include <stdio.h> int main () { /* 局部变量声明 */ int a
182 0
三元操作符类型的转换规则:
三元操作符类型的转换规则:
104 0