c++ 运算符重载

问题1复数相加减

通过一个复数例子程序来看这个运算符重载的问题。

首先是+ -重载的时候不能改变原有的对象,这里会有两个问题

问题1就是返回对象不能是引用。如果返回引用的话。原来的局部变量死了,引用没有用了。

返回普通的,还可以会产生临时变量。

问题2 在过oj编译失败no match for 'operator=' in 。。。。原因是

有时候,参数不能用引用,因为可能=号的右边是临时变量。

问题3 一开始我并不知道,<<输出流的重载,其实是对ostream& 对象的"<<",重载。

所以必须声明成友元的方式,并且还要记得 return stream哟。

弱弱地提一句话,复数的输出挺复杂,1实部如果为0的时候只输出虚部,而且输出虚部要考虑1和-1的情况。

1实部不为0的时候,也要考虑输出虚部为0 为负 为正的各种情

问题2 矩阵相加减

这个问题诈一看会觉得很简单,实际上考到很多东西。

我做的时候,浪费了太多太多时间,首先是构造,两个构造,普通构造和拷贝构造,二维数组怎么构造?

还有析构,二维数组怎么析构?

问题1

还有矩阵相加 “+"  我当时的想法是,参数矩阵对象的矩阵值我是无法直接访问的,除了写个返回函数。

结果不是,只要在该类中,声明的该类得对象的private 属性都可以访问。

所以不用写,set矩阵函数,不用写返回矩阵函数。这省了很多bug,很多事情。解救回来的时间是指数级别的。

问题2

还有矩阵的"="如何重载,真的没有想到是先析构掉,本矩阵的矩阵,然后再重新构造一遍。

析构方法是,先循环N遍来析构掉每一个数组,最后析构掉总的。for i->n delete []a[i]; delete []a

至于重新构造,那就是析构的逆过程 ,先创建M行,再创建N列,a=new int*[m],a[i]=new int[n]

=的重载需要返回*this.

 问题3时钟调整

对于++,--的重载,需要弄清楚的是,这个++,--是放前面还是后面。

如果是放前面的话。

而且还要考虑到时钟的特性,假如second大于等于60 second归0,然后minute++

minute大于等于60的话,就hour++

hour大于等于12 or 24的话,就变成 0

反之,second<=0的话,second归59,minute--

minute<=0的话,就归0,然后hour--

要是hour<=0, 就等于11 or 23

如果是放后面的话

也就是说放后面的话,要加一个int。

问题4 6 字符串的比较 人民币强制转化

如果是字符串的比较的话,有几个点需要提以下。属性中有char* str指针的。

构造函数和析构函数要小心了。

要加多一个1

还有肯定是要用到,strcpy strcmp两个函数的,所以记得包含头文件。

#include<<string.h>>

#inlcude<<stdio.h>>

还有一个关于double 转换成 int的问题,本来别人说是+0.5就可以精确了。

但是实际上,+0.05去转换才精确,不仅如此还有如果精度更高了,可能要0.0005

原文地址:https://www.cnblogs.com/zzzPark/p/6957556.html