我是c / c ++的新手,我对以下内容感到困惑:
<iostream>
之类的标题?<iostream>
,并且我将一个类的头文件包含在另一个类的标题中,是否意味着我将<iostream>
包含两次?std::
?答案 0 :(得分:8)
1.我是否应该将类声明放在自己的头文件中, 并在另一个实际实施 文件?
如果您正在操作模板,则可以在同一个头文件中分别编写类的定义和类成员的定义。此外,如果要使您的成员内联函数,您可以在类定义本身内定义它们。在任何其他情况下,最好将类(.hpp文件)的定义与类(.cpp)的成员定义分开。
2.我是否应该在example.h文件或example.cpp中添加标题 文件?
取决于您是否只需要example.h文件或.cpp文件中的那些标题。
3.如果所有类都需要使用,我将一个类的头文件包含进去 另一个班级的标题,这是否意味着我 包括两次?
如果您没有通过以下宏包装类定义,则会发生这种情况:
#ifndef FOO_HPP
#define FOO_HPP
class {
...
};
#endif
5.如果我使用很多STL课程,使用std ::?
的好习惯是什么
我认为每次只能使用std::
代替using namespace std
时更好。这样,您将只使用您需要的命名空间,并且您的代码将更具可读性,因为您将避免命名空间冲突(想象两个具有相同名称且属于两个不同命名空间的方法)。
但最重要的是问题4在哪里呢?
答案 1 :(得分:2)
一般来说,是的。它有助于组织。但是,在小型项目上,这可能不是什么大不了的事。
我在这里无法理解这个问题。如果您要问放置#include
指令的位置,则实现文件应包含头文件。
是的,但使用include guards可以防止多次包含。
答案 2 :(得分:2)
<iostream>
中的不完整类型,则可以避免将其包括在内,但对于这些类型,您需要forward declarations(请参阅When to use forward declaration?)。然而,为简单起见,如果类型使用模板,我通常会包含相应的标题; using namespace std
放在头文件中。也要注意名称空间冲突; 答案 3 :(得分:1)
通常,您会将类声明(包括成员声明)放入源文件中的头文件和成员函数(方法)的定义中。标头通常包含*.h
或*.hpp
等名称。对于第3点,你应该在你的标题中放入包含警戒,以便它们可以安全地包含在同一个源文件中;然后你可以把它们包含在你需要的任何地方。我不明白第5点:您是否在询问何时使用std::
命名空间资格?
答案 4 :(得分:1)
对于“包含两次”的问题,以下是头文件的常见模式:
// _BLAHCLASS_H_ should be different for each header, otherwise things will Go Bad.
#ifndef _BLAHCLASS_H_
#define _BLAHCLASS_H_
... rest of header ...
#endif
答案 5 :(得分:1)
std::string
的类,标题该课程将#include <string>
。assert.h
/ cassert
,包含它是有意义的不止一次)。using namespace std;
这样的使用指令,那么通常(虽然肯定不普遍)不喜欢。像using std::vector;
这样的使用声明通常被认为不那么成问题。