操作符重载
大多数 C++ 内置操作符都可以重新定义或重载。
因此,操作符也可以与用户定义的类型一起使用(例如,允许您将两个对象添加在一起)。
这个图表显示了可以重载的操作符。

不能重载的运算符包括 :: | .* | . | ?:
让我们声明一个示例类来演示运算符重载:
class MyClass {
public:
int var;
MyClass() {}
MyClass(int a)
: var(a) { }
};
我们的类有两个构造函数和一个成员变量。
我们将重载+运算符,以便将我们的类的两个对象添加到一起。

一个类中可以有多个构造函数,只能有一个析构函数。
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。
析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,它不能带任何参数,也没有返回值(包括void类型)。析构函数与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。所以只能有一个析构函数,不能重载。
重载操作符是由关键字 operator 定义的函数,后面跟随被定义操作符的符号。
重载操作符类似于其他函数,它具有返回类型和参数列表。
在我们的例子中,我们将重载+运算符。它会返回我们类的一个对象,并把我们类的一个对象作为参数。
class MyClass {
public:
int var;
MyClass() {}
MyClass(int a)
: var(a) { }
MyClass operator+(MyClass &obj) {
}
};
现在,我们需要定义函数的功能。
我们需要我们的+操作符返回一个新的 MyClass 对象,其成员变量等于两个对象的成员变量之和。
class MyClass {
public:
int var;
MyClass() {}
MyClass(int a)
: var(a) { }
MyClass operator+(MyClass &obj) {
MyClass res;
res.var= this->var+obj.var;
return res;
}
};
在这里,我们声明了一个新的 res 对象。然后,我们将当前对象(this)和参数对象(obj)的成员变量的和赋值给 res 对象的 var 成员变量。
这使我们能够在 main 中创建对象,并使用重载的+运算符将它们添加在一起。
int main() {
MyClass obj1(12), obj2(55);
MyClass res = obj1+obj2;
cout << res.var;
}
//输出 67
随着运算符的重载,你可以使用任何自定义逻辑。但是,不可能改变运算符的优先级,分组或操作数的数量。
为类“Test”定义一个重载的+运算符
class Test{
public:
Test(){}
Test(int mem):mem(mem){}
Test operator+(Test &obj){
Test newobj;
newobj.mem = this->mem+obj.mem;
return newobj;
}
int getmem(){
return mem;
}
private:
int mem;
friend int getmem(Test &obj){
return obj.mem;
}
};

文章评论
Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!