拈花小仙 发表于 2014-7-10 22:16:45

谁能用简单的代码 解释运算符重载的逻辑性

本帖最后由 风之残月 于 2014-11-10 10:19 编辑

运算符重载我总觉得没什么逻辑性,变化多端。不知怎么写才是前置,怎么写能变成后置


#include <iostream>
using namespace std;
class complex
{
private:
    double real, imag;
public:
    complex(double r = 0.0, doublei = 0.0)
    {
      real = r;
      imag = i;
    }
    complex operator + (const complex & CC)   //百科说这个operator和+运算符要看成整体?
    {                                                                         //const complex & CC 等值于取右操作数的对象吗?
      complex c(real + CC.real, imag + CC.imag);   //想知道运算符重载的原理,现在不懂原理,找不出规律\
      return c;                                                         //全是照抄代码?
    }
    void disp()
    {
      cout << real << "," << imag << endl;
    }
};
int main()
{
    complex cx1(1.0, 2.0), cx2(3.0,4.0);
    complex cx3 = cx1 + cx2;
    cx3.disp();
    return 0;
}

C++编程小组

仰望天上的光 发表于 2014-7-10 22:16:46

你代码中的cx1 + cx2可以看成cx1.operator+(cx2);//自己对照这个函数,这个函数是Complex类的成员函数,函数名叫operator+,只有一个参数,如果不死扣的话,参数可以是complex类型的(不一定非要是const complex&类型的),总之参数类型写得使cx1.operator+(cx2);看上去正确就可以了。
      cx1 + cx2也可以看成operator+(cx1, cx2);如果这样看的话,就应该实现为一个普通的函数,它有两个参数,其声明可以是complexoperator+( constcomplex& a,constcomplex& b);

小甲鱼 发表于 2014-7-10 23:31:46

小仙你要的是什么资料?

拈花小仙 发表于 2014-7-10 23:34:11

小甲鱼 发表于 2014-7-10 23:31
小仙你要的是什么资料?

运算符重载我总觉得没什么逻辑性,变化多端。不知怎么写才是前置,怎么写能变成后置。一直以来都是照抄代码,自己还是不能理解,老师讲的别的都能。一听实部 虚部我就晕。

小甲鱼 发表于 2014-7-11 14:16:26

拈花小仙 发表于 2014-7-10 23:34
运算符重载我总觉得没什么逻辑性,变化多端。不知怎么写才是前置,怎么写能变成后置。一直以来都是照抄代 ...

运算符重载只有在必要的时候才使用吧,实部、虚部指的是复数吗?具体给个例子,供大家分析分析?

仰望天上的光 发表于 2014-7-11 17:01:28

只有++和--两个运算符才分前置和后置,你先不学这两个运算符,其它运算符就没有前置后置的问题。
页: [1]
查看完整版本: 谁能用简单的代码 解释运算符重载的逻辑性