为什么要重载运算符?
如果不做特殊处理,C++ 的 +、-、*、/ 等运算符只能用于对基本类型的常量或变量进行运算,不能用于对象之间的运算。
有时希望对象之间也能用这些运算符进行运算,以达到使程序更简洁、易懂的目的。例如,复数是可以进行四则运算的,两个复数对象相加如果能直接用+运算符完成,不是很直观和简洁吗?
利用 C++ 提供的“运算符重载”机制,赋予运算符新的功能,就能解决用+将两个复数对象相加这样的问题。
运算符重载,就是对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时产生不同的行为。运算符重载的目的是使得 C++ 中的运算符也能够用来操作对象。运算符重载的实质是编写以运算符作为名称的函数。
//一
struct Node{
int x,y;
bool operator <(const Node&w)const{//重载了小于符号
if(y==w.y) return x<w.x;
return y<w.y;
}
}e[20];
sort(e+1,e+n+1);//重载了<运算符才能进行结构体之间的比较
/*加const是因为:
我们不希望在这个函数中对用来进行赋值的“原版”做任何修改。函数加上const后缀的作用是表明函数本身不会修改类成员变量。
加上const,对于const的和非const的实参,函数就能接受;如果不加,就只能接受非const的实参。
用引用是因为:(Node& W)
这样可以避免在函数调用时对实参的一次拷贝,提高了效率。*/
//二,重载对象之间的运算
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
void setLength( double len )
{
length = len;
}
void setBreadth( double bre )
{
breadth = bre;
}
void setHeight( double hei )
{
height = hei;
}
// 重载 + 运算符,用于把两个 Box 对象相加
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
C++重载运算符的规则详解
- C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载
- 重载不能改变运算符运算对象(即操作数)的个数。
- 重载不能改变运算符的优先级别
- 重载不能改变运算符的结合性。
如,复制运算符”=“是右结合性(自右至左),重载后仍为右结合性。 - 重载运算符的函数不能有默认的参数 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
- 用于类对象的运算符一般必须重载,但有两个例外,运算符”=“和运算符”&“不必用户重载。
- 应当使重载运算符的功能类似于该运算符作用于标准类型数据时候时所实现的功能
- 运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数。
参考资料:
https://www.cnblogs.com/summernight/p/8541079.html----C++重载运算符的规则详解
http://c.biancheng.net/view/222.html------C++运算符重载的概念和原理
https://blog.csdn.net/qq_36770641/article/details/89884807-----C++ 重载运算符使用const的原因
来源:CSDN
作者:嘻嘻哈哈没有目标
链接:https://blog.csdn.net/qq_44759750/article/details/103952512