C++ 中运算符重载是一种强大的特性,它允许程序员对已有的运算符进行重新定义,以适应自定义类型的操作。运算符重载是 C++ 编程语言中的一种技术,其使用方法类似于函数重载。
运算符重载允许将操作符赋予新的含义,即定义新的含义,提供了一种可以方便使用自定义类型的方式,而无需编写复杂的函数调用。常见的运算符重载包括:算术运算符、复合赋值运算符、关系运算符、逻辑运算符、下标运算符、函数调用运算符等。
用户定义的类型可以重载作为类成员的运算符和全局运算符。类成员运算符重载在组合类时特别有用。全局运算符重载允许更多的操作被定义为赋给一个类的本身的任意对象。注意,在类成员运算符重载中,通常应该显式地修改运算符要操作的数据。
使用运算符重载时需要遵循以下几个原则:
运算符重载是通过函数来实现的,其中函数名以 "operator" 关键字开头,后跟要重载的运算符。
运算符重载函数必须具有参数列表,不能有默认参数。
运算符重载函数可以作为常量成员函数或非常量成员函数,取决于它是如何修改对象的。
某些运算符(如赋值运算符和下标运算符)必须作为成员函数重载。其他运算符可以作为全局函数或成员函数重载。
下面是示例代码:
include
using namespace std;
class Box
{
public:
int getLength( void )
{
return length;
}
int getWidth( void )
{
return width;
}
int getBreadth( void )
{
return breadth;
}
void setLength( int len )
{
length = len;
}
void setWidth( int wid )
{
width = wid;
}
void setBreadth( int bre )
{
breadth = bre;
}
// 重载 + 运算符,用于 Box 对象相加
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.width = this->width + b.width;
box.breadth = this->breadth + b.breadth;
return box;
}
private:
int length;
int width;
int breadth;
};
int main( )
{
Box Box1;
Box Box2;
Box Box3;
int volume = 0;
// Box1 详述
Box1.setLength(6);
Box1.setWidth(7);
Box1.setBreadth(5);
// Box2 详述
Box2.setLength(12);
Box2.setWidth(13);
Box2.setBreadth(10);
// Box1 的体积
volume = Box1.getLength() * Box1.getWidth() * Box1.getBreadth();
cout << "Box1 的体积为: " << volume << endl;
// Box2 的体积
volume = Box2.getLength() * Box2.getWidth() * Box2.getBreadth();
cout << "Box2 的体积为: " << volume << endl;
// Box1 + Box2 的体积
Box3 = Box1 + Box2;
volume = Box3.getLength() * Box3.getWidth() * Box3.getBreadth();
cout << "Box3 的体积为: " << volume << endl;
return 0;
}
C++
上述代码定义了一个表示立方体的类 Box,该类重载了运算符 + 以支持立方体对象相加。在主函数中,先定义了两个立方体对象 Box1 和 Box2,计算它们的体积并输出结果,然后将它们相加得到新的立方体对象 Box3,再计算其体积并输出结果。运行结果如下:
Box1 的体积为: 210
Box2 的体积为: 1560
Box3 的体积为: 1770
通过这个例子,我们可以看到运算符重载的便利性,在不修改原有代码逻辑的情况下,可以为用户自定义类型增加更加自然的操作方式。