初学问一个类声明类实现和主程序分离时#include放哪里的问题

xsjinyang 2018-02-10 11:39:41
刚学C++,类声明类实现和主程序分离时#include<iostream>应该放哪里在下面这个程序中出了问题。教材里的简单例子显示时间(时:分:秒)用的VS2010,
//Time.h------------------------------------------------------------
#pragma once
class Time
{
public:
Time(int h=0,int m=0,int s=0);
~Time(){}
friend ostream & operator<<(ostream &output,Time &t);
private:
int hour;
int minute;
int sec;
};

//Time.cpp---------------------------------------------------------
#include"Time.h"
Time::Time(int h,int m,int s)
{
hour=h;
minute=m;
sec=s;
}

//main.cpp--------------------------------------------------
#include"Time.h"
int main()
{
ostream & operator<<(ostream &output,Time &t);
Time t1(22,50,50);
cout<<t1<<endl;
return 0;
}
ostream & operator<<(ostream &output,Time &t)
{
output<<t.hour<<':'<<t.minute<<':'<<t.sec;
return output;
}

------------------------------------------------------------------------
1.这个程序会报错。
2.在Time.h和main.cpp里都加
#include<iostream>
using namespace std;则不报错。
3.只在Time.h里加
#include<iostream>
using namespace std;则不报错。
--------------------------------------------------------------------
问题是
1.上述操作为什么就解决问题了。
2.我的理解是只要放到Time.h里,然后main.cpp里#include“Time.h”,因为Time.h里有了#include<iostream>,所以这是一种万能的方法?这样会不会不符合编程的习惯经验。

请大神们指教,鄙人刚学C++。
...全文
584 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我的名字啊 2018-02-12
  • 打赏
  • 举报
回复
主要看你有哪些文件中使用<iostream>,如果只是单独一个.cpp中使用的话只需在这个.cpp中包含一次就好了。你说的那种万能的方法也是可以用的,只是比较浪费,因为你每一个包含time.h的文件都会包含这个头文件中所包含的头文件,在编译的时候就会比较浪费时间,因为他需要多次编译这些头文件。正常来说头文件都是需要的话才需要包含,不需要的能不包含就不包含,当然就算你包含了也不算错。
ooolinux 2018-02-10
  • 打赏
  • 举报
回复
只要每个cpp文件都能独立编译,就可以了,只需包含必要的头文件。 如果你的Time.h被多个cpp文件#include,有的cpp没必要包含<iostream>,那#include<iostream>放在Time.h里就有部分多余了,放在必要的cpp里就可以了。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧