在C ++中,我们可以使运算符为用户定义的类任务。这意味着C ++可以为运算符提供数据类型的特殊含义,这种才能称为运算符重载。
例如,我们可以在String之类的类中重载运算符'+',以便仅运用+就可以衔接两个字符串。 算术运算符能够会重载的其他示例类是双数,小数,大整数等。
一个复杂而残缺的例子
#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();
}
操作员功用和普通功用有什么区别?
操作员功用与普通功用相反。独一的区别是,运算符的称号一直是运算符关键字,后跟运算符的符号,并且在运用相应的运算符时会调用运算符功用。
以下是全局运算符功用的示例。
#include<iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}
void print() { cout << real << " + i" << imag << endl; }
friend Complex operator + (Complex const &, Complex const &);
};
Complex operator + (Complex const &c1, Complex const &c2)
{
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2;
c3.print();
return 0;
}
我们可以让一切运算符超负荷吗?
除了少数操作员之外,简直一切操作员都可以重载。以下是不能重载的运算符的列表。
为什么不能。(点),::,?:和sizeof能否过载?
请参阅此以获取Stroustrup本人的答案。
关于运算符重载的要点
1)为了使运算符重载起作用,至少一个操作数必须是用户定义的类对象。
2) 赋值运算符:编译器会自动为每个类创立一个默许的赋值运算符。默许赋值运算符确实将右侧的一切成员分配到左侧,并且在大少数状况下都可以正常任务(此行为与复制结构函数相反)。请参阅此了解更多概略。
3) 转换运算符:我们还可以编写可用于将一种类型转换为另一种类型的转换运算符。
#include <iostream>
using namespace std;
class Fraction
{
int num, den;
public:
(责任编辑:admin)