C++中的运算符重载是指将C++中的运算符与用户定义的类型相关联,以实现特定功能的一种技术。运算符重载可以使用户定义的数据类型像内置数据类型一样使用标准运算符,从而使代码更加易读、易于理解。
下面是一个关于c++中运行时间重载的例子:
#include <iostream> using namespace std; class Complex { private: int real, imag; public: Complex(int r = 0, int i =0) {real = r; imag = i;} // 重载 + 运算符,用于两个复数相加 Complex operator + (Complex const &obj) { Complex res; res.real = real + obj.real; res.imag = imag + obj.imag; return res; } void print() { cout << real << " + i" << imag << endl; } }; int main() { Complex c1(10, 5), c2(2, 4); Complex c3 = c1 + c2; // 重载后,可以直接相加 c3.print(); // 输出 12 + i9 return 0; }
运算符可以为自定义类型重载。
以下符号运算符可以重载:
+(unary)
-(unary)
!
~
++
--
+
-
*
/
%
&
|
^
<<
>>
==
!=
>
<
>=
<=
以下运算符也是可重载的:隐式和显式转换true和false。
复合赋值运算符(例如,+ =,/ =)通过重写非复合运算符(例如,+,/)而隐式重写。
条件运算符&&和||通过重写按位运算符&和|隐式重写。
运算符通过声明运算符函数重载。
函数的名称使用运算符关键字和运算符符号指定。
运算符函数必须标记为static和public。
操作符函数的参数表示操作数。
运算符函数的返回类型表示表达式的结果。
至少一个操作数必须是声明操作符函数的类型。
在下面的示例中,我们定义一个名为Coin的结构,然后重载+运算符:
public struct Coin {
int value;
public Coin (int c) {
value = c;
}
public static Coin operator + (Coin x, int p) {
return new Coin (x.value + p);
}
}
这个重载允许我们给一个Coin添加一个int:
Coin B = new Coin (2);
Coin A = B + 2;
重载赋值运算符会自动支持相应的复合赋值运算符。
在我们的示例中,由于我们覆盖+,我们也可以使用+ =:
B += 2;
C#编译器强制执行要定义的逻辑对的运算符。这些运算符是(==!=),(<>)和(<=> =)。
如果你重载==和!=,你通常需要重写对象上定义的Equals和GetHashCode方法。
如果你重载(<>)和(<=> =),你应该实现IComparable和IComparable <T>。
隐式和显式转换是可重载的操作符。
C# 可空类型引用类型可以使用空引用表示不存在的值。值类型通常不能表示空值。例如:string s = null; // OK, Reference Typeint ...
C# 枚举枚举器是值的列表上的只读,只向前的光标。枚举器是实现以下任一接口的对象:System.Collections.IEnumeratorSystem.Colle...
C# for/foreach 循环C# 循环一个 for 循环是一个允许您编写一个执行特定次数的循环的重复控制结构。语法C# 中 for 循环的语法:f...
C# 传递数组给函数 C# 数组在 C# 中,您可以传递数组作为函数的参数。您可以通过指定不带索引的数组名称来给函数传递一个指向数...