回 帖 发 新 帖 刷新版面

主题:求助朋友帮忙看下这个程序

请朋友帮忙看下这个程序
为什么将complex complex::operator+=(complex &p)和complex complex::operator-=(complex &p)改成注释那样的写法就错了呢?
头文件
//定义复数类,实现复数的+、-、+=、++先、++后、--先、--后运算符重载:成员函数和友元函数
#include<iostream>
using namespace std;
class complex
{
private:
    double real,item;
public:
    complex(double x,double y);
    complex(complex &p);
    void print();
    complex operator+=(complex &p);
    complex operator-=(complex &p);
    complex operator++();
    complex operator--();
};
complex::complex(double x,double y)
{
    real=x;
    item=y;
}
complex::complex(complex &p)
{
    real=p.real;
    item=p.item;
}
void complex::print()
{
    cout<<real<<"+"<<item<<"i"<<endl;
}
complex complex::operator+=(complex &p)
{
    real=real+p.real;
    item=item+p.item;
    return *this;
    //为什么上面的程序改成下面注释的写法就错了呢?    
    /*double r,i;
    r=p.real+real;
    i=item+p.item;
    return complex(r,i);
     */
}
complex complex::operator-=(complex &p)
{
    real=real-p.real;
    item=item-p.item;
    return *this;
    //为什么上面的程序改成下面注释的写法就错了呢?
    /*double r,i;
    r=p.real-real;
    i=item-p.item;
    return complex(r,i);
     */
}
complex complex::operator ++()
{
    real++;
    item++;
    return *this;
}
complex complex::operator --()
{
    real--;
    item--;
    return *this;
}
实现文件
#include"1.h"
#include<iostream>
#include<cstdlib>
void main()
{
    complex a(3,4),b(4,5);
    a.operator+=(b);
    a.print();
    system("pause");
}

回复列表 (共2个回复)

沙发


个人认为,你的double的赋值什么的都没问题,问题出在你的return语句上了,你return的时候,调用的是complex这个类的构造函数,而complex的构造函数会按照你传递的参数去运行,但是这个构造函数并没有返回一个你所要的complex的对象,这个和你定义的返回值是不符合的,它只是实现了把real,item赋值而已。你return的是complex的对象。

板凳

你看一下改进后的代码。里面作了说明。
#include<iostream>
using namespace std;
#include<cstdlib>
class complex
{
private:
    double real,item;
public:
    complex(double x,double y);
    complex(complex &p);
    void print();
    complex operator+=(complex &p);
    complex operator-=(complex &p);
    complex operator++();
    complex operator--();
};
complex::complex(double x,double y)
{
    real=x;
    item=y;
}
complex::complex(complex &p)
{
    real=p.real;
    item=p.item;
}
void complex::print()
{
    cout<<real<<"+"<<item<<"i"<<endl;
}
complex complex::operator+=(complex &p)
{
    /*real=real+p.real;
    item=item+p.item;
    return *this;*/
    //为什么上面的程序改成下面注释的写法就错了呢?    
   /* double r,i;
    r=p.real+real;
    i=item+p.item;
    return complex(r,i);*/
    //不论这里为什么实参都是输出3+4i,
    //因为在这个成员函数中没有变主函数中
    //complex类的对象a 的数据成员real item
    //return complex(10,10);
    //return complex(20,20);

    //注意,作如下改进就可以了。
    real+=p.real;
    item+=p.item;
    return *this;
     
}
complex complex::operator-=(complex &p)
{
    real=real-p.real;
    item=item-p.item;
    return *this;
    //为什么上面的程序改成下面注释的写法就错了呢?
    /*double r,i;
    r=p.real-real;
    i=item-p.item;
    return complex(r,i);
     */
}
complex complex::operator ++()
{
    real++;
    item++;
    return *this;
}
complex complex::operator --()
{
    real--;
    item--;
    return *this;
}


void main()
{
    complex a(3,4),b(4,5);
    a.operator+=(b);
    a.print();
    system("pause");
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册