重载双目运算符和重载单目运算符

new 和delete是单目运算符。

strcmp函数将两个字符串进行比较,相等返回0;小于返回负数;大于返回正数。

strcpy的用法:

函数原型:char  *strcpy(char * est.const char *src)

功能是从src地址开始且含有null结束符的字符串复制到以dest地址开始的字符串中,并返回指向dest的指针。dest的内存长度要大于src的内存长度,否则会产生溢出。

因此两个字符串在相互赋值的时候如下:

char *p;

char *str="hello";

p=new char[strlen(str)+1];

strcpy(p,str);


c++中提供的非标准类string中的s是小写的。complex也是c++中的非标准类,表示复数,第一个字母是小写的。

重载双目运算符的时候可以借助于已经完成的重载运算符函数来做接下来的运算符重载函数。


重载单目运算符:只有一个运算量

单目运算符重载函数作为成员函数时:

成员函数参数可以省略,因为成员函数中有默认参数*this,也就是当前对象。也就是说单目运算符的重载函数的参数为空。

不需要使用友元函数和一般函数。原因在于:对于运算符重载函数来说,它必须有一个参数,并且在所有的参数当中必须包含一个

该类的对象,该类的对象也就是当前对象,所以不需要别的元素,所以不用友元函数和一般函数。



对于单目元素运算符的重载,比如取反-,例子如下:

s=-x;

这句程序实际上是s=x.operator-();

所以单目运算符的重载函数的特点是没有参数的成员函数。而我们可以知道的是普通的单目运算符都是比如取反一样,符号在前,运算量在后,这样的都是无参数的,而前置++也和普通的前置运算符一样,所以也是无参的;但是我们需要区分前置++和后置++,而后置++并不是和普通单目运算符一样符号在前运算量在后,所以后置++的重载函数的参数不为空,而是int。


以Time类的前置++为例:

j=++i 是将i加1,然后将i的值取出来赋值给j

j=i++ 将i值取出来赋值给j,然后i加1

上面两种,当前对象i都要加1,但是返回值不一定。

Time类中的前置++的实现如下:

重载双目运算符和重载单目运算符_第1张图片

但是对于后置++来说,它和前置++是相同的,因此定义重载函数的时候无法进行区分。因此

c++中规定,后置++的重载函数的参数不为空,而是int,以Time类的后置++为例,如下:

重载双目运算符和重载单目运算符_第2张图片

对于上面的后置++,可以看到在重载函数中生成了一个新的Time对象temp,这个temp使用复制的方式通过调用默认复制构造函数进行初始化的,

而这个函数结束之后,temp离开了作用域就会被解析释放掉。

对于前置++和后置++,因为后置++实现的过程中需要创建新对象、释放对象,所以它的效率不如前置++。因此,尽量使用前置++。



你可能感兴趣的:(重载双目运算符和重载单目运算符)