zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDOJ.1029 Ignatius and the Princess IV(map)
    STL之map
    STL之map
    UVA.1584 环状序列
    UVA.1584 环状序列
    AOJ. 数组训练.2016-11-17
    AOJ. 数组训练.2016-11-17
    AOJ.592 神奇的叶子
    AOJ.592 神奇的叶子
    技能书
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6957556.html
Copyright © 2011-2022 走看看