一、概念
赋予已有的运算符多重含义。
二、注意事项
(1)不能重载的运算符名
:: 、 .* 、 . 、 ?:
(2)必须具有一个类类型(或枚举类型)操作数
(3)优先级和结合性是固定的
(4)不再具有短路求值特性
作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。这是这两个操作符的一个重要属性。
三、大多数都可定义为普通非成员函数或类的成员函数。
(1)一般将算术和关系操作符定义为非成员函数;
将赋值操作符定义为成员。
(2)当操作符定义为非成员时,通常将其设置为所操作类的友元。(因为通常会需要操作类的私有成员)
四、使用
(1)像内置的一样:
如:cout << a+b << endl;
(2)像普通函数一样:
如: cout << operator+(a,b ) ;
五、示例(下面只贴出了关键代码部分)
(1)单目运算符的重载1
operator ++ 作为友元的重载
class A
{
int a, b;
public:
A(int x, int y):a(x),b(y){}
void disp();
friend A& operator ++ (A&);
};
A& operator ++ (A& m)
{
m.a ++;
m.b ++;
return m;
}
(2)单目运算符的重载2
operator ++ 作为成员函数的重载
class A
{
int a, b;
public:
A(int x, int y):a(x),b(y){}
void disp();
A& operator ++ ();
};
A& A::operator ++ ()
{
a ++;
b ++;
return *this;
}
(3)双目运算符的重载1
operator + 作为友元的重载
class A
{
int a, b;
public:
A(int x, int y):a(x),b(y){}
void disp();
friend A operator + (const A &,const A &);
};
A operator + (const A& x, const A& y)
{
int a = x.a + y.a;
int b = x.b + y.b;
return A(a,b);
}
(4)双目运算符的重载2
operator + 作为成员函数的重载
class A
{
int a, b;
public:
A(int x, int y):a(x),b(y){}
void disp();
A operator + (const A &);
};
A A::operator + (const A& x)
{
return A(a+x.a, b+x.b);
}
306

被折叠的 条评论
为什么被折叠?



