C++类与对象之运算符重载详解
什么是运算符重载
运算符重载是指在C++中,对运算符进行二次定义,使得运算符能够作用于类对象。
直接使用运算符进行对象的操作,无法实现对象之间的交互和操作。因此,运算符重载应运而生,它可以使得运算符作用于类对象,从而实现对象之间的交互和操作。
为什么要进行运算符重载
运算符重载可以使得程序更加直观、易懂、易用,同时也能够提高程序的可读性和可维护性。
例如,对于两个复数对象进行加法操作。通过运算符重载,我们可以像对两个整型数进行加法操作一样,直接使用“+”运算符进行操作,大大简化了代码。
运算符重载的注意事项
- 运算符重载必须是一个函数,并且函数名必须是operator+、operator-等等,其中“+”、“-”为运算符。
- 运算符重载必须要有返回值,返回值的类型可以是任意类型,包括Class类型,但返回值类型不能是void。
- 运算符重载函数的参数列表有且仅有1个或者2个,不能超过2个。其中,一个参数是运算符左边的操作数,另一个参数是运算符右边的操作数。如果只有一个参数,则为一元运算符,例如-、++等等。
- 除了赋值运算符
=
,其他的运算符重载不改变对象的值,需要通过返回值来实现变化。
运算符重载的语法格式
返回值类型 operator 运算符(参数列表){
// .. 完成运算符操作的代码
}
运算符重载的示例1:重载“+”运算符
class Complex {
public:
Complex() : m_real(0), m_imag(0) {}
Complex(double r, double i) : m_real(r), m_imag(i) {}
Complex operator+(Complex &c2) {
Complex temp;
temp.m_real = m_real + c2.m_real;
temp.m_imag = m_imag + c2.m_imag;
return temp;
}
private:
double m_real; // 实部
double m_imag; // 虚部
};
在上面的示例中,我们重载了“+”运算符,使得它能够作用于Complex类型的对象。我们使用两个Complex对象相加,生成一个新的Complex对象,并返回该新对象。这样,我们就可以像对待普通数字一样,对待Complex对象了。
运算符重载的示例2:重载“=”运算符
class MyString {
public:
MyString(const char *str = nullptr)
{
if (nullptr == str) {
m_data = new char[1];
*m_data = '\0';
} else {
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
}
MyString(const MyString &other)
{
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
}
MyString & operator =(const MyString &other)
{
if (this == &other) {
return *this;
}
delete[] m_data;
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
return *this;
}
~MyString()
{
delete[] m_data;
}
private:
char *m_data; // 串的实际存储数据
};
在上面的示例中,我们重载了“=”运算符,使得它能够作用于MyString类型的对象。我们使用两个MyString对象相“=”(赋值),生成一个新的MyString对象,并返回该新对象。
运算符重载的总结
- 运算符重载的语法格式:
返回值类型 operator 运算符(参数列表){}
。 - 运算符重载可以使得程序更加直观、易懂、易用,同时也能够提高程序的可读性和可维护性。
- 运算符重载必须要有返回值,返回值的类型可以是任意类型,包括Class类型,但返回值类型不能是void。
- 运算符重载的参数列表有且仅有1个或者2个,不能超过2个。其中,一个参数是运算符左边的操作数,另一个参数是运算符右边的操作数。如果只有一个参数,则为一元运算符,例如-、++等等。
- 除了赋值运算符
=
,其他的运算符重载不改变对象的值,需要通过返回值来实现变化。 - C++内置的运算符无法重载:sizeof、.*、.、::、?:。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++类与对象之运算符重载详解 - Python技术站