我是c/c++的新手,对以下问题感到困惑:
- 我是否应该将类声明放在自己的头文件中,将实际实现放在另一个文件中?
- 我应该在example.h文件还是example.cpp文件中放置像iostream这样的头文件?
- 如果所有类都需要使用iostream,我将一个类的头文件包含到另一个类的头文件中,这是否意味着我重复包含了iostream?
- 如果我使用了很多STL类,使用std::的好习惯是什么?
我是c/c++的新手,对以下问题感到困惑:
1. 我是否应该将类声明放在自己的头文件中,而将实际实现放在另一个文件中?
如果您正在操作模板,则可以在同一头文件中分别编写类的定义和成员定义。此外,如果要使成员函数内联,可以在类定义本身中定义它们。在任何其他情况下,最好将类的定义(.hpp文件)和类成员的定义(.cpp文件)分开。
2. 是否应将头文件放在example.h文件中还是example.cpp文件中?
这取决于您是否仅需要在example.h文件或.cpp文件中使用这些头文件。
3. 如果所有类都需要使用,我将一个类的头文件包含到另一个类的头文件中,这意味着我已经包含了两次吗?
如果您没有使用以下宏来包装类定义,则会发生这种情况:
#ifndef FOO_HPP
#define FOO_HPP
class {
...
};
#endif
FOO_HPP
前面的双下划线,我会点赞的。 ;) - Maxpm通常是这样的。它有助于组织。但在小型项目中可能不是那么重要。
我在这里理解问题有些困难。如果你想知道在哪里放置#include
指令,实现文件应该包含头文件。
是的,但使用include guards可以防止多次包含。
// _BLAHCLASS_H_ should be different for each header, otherwise things will Go Bad.
#ifndef _BLAHCLASS_H_
#define _BLAHCLASS_H_
... rest of header ...
#endif
BLAHCLASS_H_INCLUDED
)。 - Matteo Italia*.h
或*.hpp
这样的名称。至于第3点,您应该在头文件中放置包含保护,以便它们可以在同一源文件中安全地被多次包含;然后您可以在需要它们的任何地方包含它们。我不理解第5点:您是否在询问何时使用std::
命名空间限定?std::string
的类,那么该类的头文件将会 #include <string>
。assert.h
/cassert
,这时可能需要多次包含)。using namespace std;
这样的 using 指令,那么它通常被人们所不喜欢(当然也不是普遍如此)。像 using std::vector;
这样的 using 声明通常被认为是较少问题的。