c++d的运算符重载

  1. 运算符的重载规则

a.运算符重载必须符合语言语法

例如:不能在c++中写

float f;

3.14=f;

所以重载运算符”=”也不能用来下面的操作:

Complex c;

3.14+6i=c;

b.不能重载对内部c++数据类型进行操作的运算符.

例如,不能重载二元浮点减法运算符.

c.不能创建新的运算符,所有重载运算符必须是c++中原来就有的

d.不能重载以下运算符:类成员选择运算符,成员指针运算符,作用域运算符.

  2.运算符重载的形式

运算符重载的原型为:

<返回值类型> operator <运算符>(<形式参数表>)

例如:

定义一个complex类

class complex

{

private:

double imag,real;

public:

complex(double a=0,double b=0){real=a;imag=b;}//当无参传入时两者都为0.

complex operator +(complex c);//成员函数重载传入的参数个数都比操作的个数少一个,因为它为复数类,所以返回值也为complex.

 

};

complex complex::operator +(complex c)

{

complex temp;//定义一个复数类用来保存最后的结果

temp.real=real+c.real;//real默认为当前对象的real,我们也可以用this指针来写.

temp.imag=imag+c.imag;

return  temp;

}

在主函数中

c=c1+c2;//在计算机看来,会把它当做c1.operator + (c2);

 

如果我们需要二元的运算符,这时我们就要将运算符重载定义为友元函数重载运算符.

函数原型为:

friend <返回值类型> operator <运算符>(<形式参数表>).

与成员函数不同,友元函数重载运算符需要的参数个数和操作个数一样多.例:

friend complex operator +(complex c1,complex c2)

{

complex temp;

temp.real=c1.real+c2.real;//因为友元函数没有this指针所以这里也不可以用到this指针

temp.imag=c1.imag+c2.imag;

return  temp;

}

        在主函数中c1+c2计算机会把它看做为operator + (c1,c2).

Ps:

两种运算符在功能上没有太大的区别,但是友元函数重载运算符更为灵活.

例:

C=3.14+c1;

如果将+用成员函数重载,那么计算就会将它看做为3.14.operator + (c1),那么程序就会报错,如果利用友元函数进行重载,就可以解决这个问题.

 

  单目运算符的重载:

例如:

class Counter

{

private:

Counter(int i=0){value=i;}

Counter operator ++();//这是前缀的++运算符

Counter operator ++(int);//这是后缀的++运算符.

};

在重载中的写法与成员函数运算符重载和友元函数运算符重载类似,--运算符与++运算符的重载一样,括号里面的int没有实际作用,只是为区别前缀和后缀,不需要传入参数.

 

  

 

上一篇:备忘-Sql server Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置


下一篇:C++运算符重载