我需要帮助理解以下内容:
我重载<<运营商。我写了一个测试程序。我没有包含“using namespace std”代码。但该计划运作良好。
#include <iostream>
#include "fraction.h"
//using namespace std;
int main(void)
{
//constructing two fractions
Fraction a(4, 2);
Fraction b(17, 11);
//modifying them that is entering a fractions from keyboard
cin>>a;
cin>>b;
//computing product and quotient and printing them using cout
cout<<a*b<<endl;
cout<<a/b<<endl;
}
但是你可以看到我使用了来自标准命名空间的“endl”。你能解释一下我来到这里的“悖论”吗?
P.S我没有包含.h和.cpp文件,因为我认为它们无关紧要。
答案 0 :(得分:1)
编译器适用于翻译单元。它需要一个.cpp然后在翻译单元中插入.h文本。如果您的头文件包含using namespace std;
,它将有效地出现在编译器尝试编译的代码中。
这是一种不好的做法,因为如果其他命名空间使用相同的名称,您可以将命名空间using
推到用户喉咙,并且可能导致名称冲突。
答案 1 :(得分:0)
如果您可以使用cin
和cout
,问题是使用endl
,那么您的fraction.h
文件最有可能以两种方式之一包含这些依赖项
using std::cin;
using std::cout;
using std::endl;
或
using namespace std;
答案 2 :(得分:0)
当你#include
时,是否用文件直接替换文本。由于您#include "fraction.h"
并且它可能有行
using namespace std;
主文件也使用std
。
另请注意,在头文件中using namespace std;
不是一个好习惯,因为包含标头的其他任何地方也会自动使用std
,如果程序员不知道,可能会导致冲突。