为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码内容是关于iostream.h和iostream的使用,求解释~

以下代码内容是关于iostream.h和iostream的使用,求解释~

C++ C
一只名叫tom的猫 2021-12-07 23:19:09
以下程序使用友元函数重载<<、>>,使之能适用于复数类:#include<iostream.h>class Complex{double Real, Image;public:Complex(double r=0, double i=0){Real=r; Image=i;}friend istream& operator>>(istream &, Complex &);friend ostream& operator<<(ostream &, Complex &);};istream& operator>>(istream &in, Complex &c){  in>>c.Real>>c.Image;return in;}ostream& operator<<(ostream &out, Complex &c){  out<<c.Real;if(c.Image>0) out<<'+'<<c.Image<<'i'; else if(c.Image<0) out<<c.Image<<'i'; out<<endl;return out;}void main( ){Complex c1(1, 2), c2;cout<<c1; cout<<"Please input c1 & c2:\n";cin>>c1>>c2; cout<<c1<<c2; }此程序可以正确运行,但是一旦将#include<iostream.h>改成#include<iostream>using namespace std;编译就无法通过了,提示说重载运算符的函数不能访问Complex的私有成员,请问这是什么道理?这两种用法到底有何区别?这个程序怎样能改成使用第二种写法的正确程序呢?
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

你这个程序在g++,中改成后面的可以使用。
如果学习C++,必须使用VC2003或者以上版本(Anders写的)。
VC6/VC98中有很多C++的硬伤,那时候的VC连你说的那个iostream都不能完整支持。
语法兼容性才8X%,也就是说很可能你的程序没有任何问题,VC也不能编译通过,#include<iostream.h> 这个就是因为iostream在那个年代还不能完全支持的产物。
至于你说的问题,个人感觉像VC 6的bug之一或者环境中另外有一个同名类。
此外,main的返回值应当是int,你那样写在现代编译器会报错。

查看完整回答
反对 回复 2021-12-12
?
湖上湖

TA贡献2003条经验 获得超2个赞

在某些编译器中 就必须用#include<iostream.h>
而有的就是必须用#include<iostream>
using namespace std;
有的是两者都可以 例如你在vs2005就不能用#include<iostream.h>
没什么意义就是编译器不认同了

查看完整回答
反对 回复 2021-12-12
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

同编译器有关吧。两种写法都可以,结果一样。
正规写法 (新的国际标准)无 .h:
#include<iostream>
using namespace std;

查看完整回答
反对 回复 2021-12-12
  • 3 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信