一、编写MyString类
对于下面的类MyString,要求重载一些运算符后可以计算表达式a=b+c。
其中,a、b、c都是类MyString的对象。请重载相应的运算符并编写程序测试。
解析:
为了实现a=b+c这个表达式,需要重载两个运算符,一个是‘+’,一个是‘=’,程序如下:
这里有三个版本的‘+’操作符重载函数,它们都是调用strcpy复制第一个字符串,然后调用strcat连接两个字符串。
第一个版本返回*this对象,它改变了被加对象的内容。使用第一个‘+’操作符重载函数版本的执行结果:
第二个版本和第三个版本都是返回堆中构造的对象,它们没有改变被加对象内容。它们的区别如下:
(1)第二个版本属于类的成员函数,而第三个版本是类的友元函数。
(2)第二个版本的参数为1个,而第三个版本的参数为2个,因为友元函数不含有this指针。
(3)由于类的友元函数不能使用私有成员,因此在这里使用第三个版本时需要把str成员的访问权限改为public。
使用这两个操作符重载函数版本的结果:
选择何种版本的‘+’操作符重载函数要取决于实际情况。
二、new操作符重载的使用
下面程序中主函数的new是类中new操作符重载。但是new后面只有一个参数0xa5,而类中函数的声明有两个参数。怎么调用这个类呢?
这里有一下几点需要说明:
(1)重载new操作符第一个参数必须是size_t类型,并且传入的值就是类的大小。
(2)代码25行中的0xa5表示第二个参数的大小,也就是chInit为0xa5.
(3)代码18行,用chInit初始化分配的那块内存。