C++中连续输出的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 21:03:54
#include<iostream.h>
class complex
{
private:
double real,ima;
public:
complex();
complex(double,double);
friend ostream& operator<<(ostream&,const complex&);
friend istream& operator>>(istream&,complex&);
complex operator++();
complex operator++(int);

};
complex::complex()
{
real=ima=0;
}
complex::complex(double a,double b)
{
real=a;
ima=b;
}
complex complex::operator ++()
{
real=real+1;
ima=ima+1;
return (*this);
}
complex complex::operator ++(int)
{
complex buf=(*this);
ima++;real++;
return buf;
}

ostream& operator<<(ostream& os,const complex& c)
{
cout<<c.real<<"+"<<c.ima<<"i"<<endl;
return cout;
}
istream& operator>>(istream& i, complex& c)
{
cout<<"real=&quo

cout<<c1<<(c1++)<<(++c1)

我只能说,在C里面这种运算是从最右面开始计算的
为方便解释, c1 = 1;
从右面开始首先计算 ++c1,然后输出c1(输出2)
中间 ,首先输出c1(输出2) ,然后计算c1 ++
最左边,输出 c1 (输出3)

自增操作符的优先级大于>>操作符,所以那句输出语句是先将前缀后缀++先计算,再输出.当然 不同的编译器会出现不同的结果,最严谨的写法如下(你这程序写的很没有条理,私有变量怎么能直接访问?)

// 1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;

class complex
{
private:
double real,ima;
public:
complex();
complex(double,double);
friend ostream& operator<<(ostream&,complex&);
friend istream& operator>>(istream&,complex&);
complex operator++();
complex operator++(int);
double getrealpart() { return real; } //接口都没写, 怎么访问私有数据?
double getimapart() { return ima; }
void putrealpart(double realpart) { real = realpart; }
void putimapart(double imapart) { ima = imapart; }
};
co