应该在哪里声明类对象
Where should class objects be declared?
它们应该在.cpp
或.h
文件中声明吗?
示例1:
A.h
#include "B.h"
#include "C.h"
class A
{
void someFunction();
B b;
C c;
}
示例2:
A.cpp
#include "B.h"
#include "C.h"
A::someFunction()
{
B b;
C c;
// Do something with b and c.
}
示例3:
A.cpp
#include "B.h"
#include "C.h"
B b;
C c;
A::someFunction()
{
// Do something with b and c.
}
它们应该只在使用它们的函数中声明(例2),还是可以像例3那样在头include下的文件顶部声明?
所有这些例子都是针对不同的用例:
A.h
#include "B.h"
#include "C.h"
class A
{
void someFunction();
B b;
C c;
}
将B
和C
类型的对象b
和c
分别添加到您的类A
中。任何类型为A
的对象现在都可以访问这另外两个对象。(只是不在类外,因为它们是隐式的private
)。这与例2有很大的不同。3因为它实际上还没有定义任何变量,直到你实例化一个A
的对象。
示例2:
A.cpp
#include "B.h"
#include "C.h"
A::someFunction()
{
B b;
C c;
// Do something with b and c.
}
当您只需要在someFunction
中使用b
和c
并且它们的更改不必对函数外部可见时,这通常是最好的场景。注意,它们的生命周期直到函数结束为止。
示例3:
A.cpp
#include "B.h"
#include "C.h"
B b;
C c;
A::someFunction()
{
// Do something with b and c.
}
这里,b
和c
都是全局变量,全局变量通常不受欢迎,因为它们很难跟踪代码的哪一部分对这些变量做了什么修改。一个更好的选择是传递它们并在main()
中定义它们,如果它们的生命周期应该是整个程序。
尽可能用最窄的范围声明它们。如果class
仅在单个翻译单元中使用,则在源文件中声明并定义它。通常,只有在多个事务单元需要声明class
时,您才会在头文件中声明。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 对象声明中的模板"error: expected expression"
- 为什么我的对象声明不调用默认构造函数?
- C++文件中.cpp静态对象声明
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 具有多态性的对象声明中的逗号
- 如果我的班级是字面的班级,那么将我的类的对象声明为constexpr是多余的
- 何时应在Qt中将子对象声明为其父类的成员变量
- 在将对象声明为挥发性时,如何在C 中超载运算符
- 将一个类的对象声明为另一个类(C++)的成员
- 将对象声明为其自身的成员变量
- C 全局对象声明
- 尝试和捕获中的对象声明未在范围内定义
- 向量对象声明后的括号是什么意思
- C++对象声明被称为抽象
- 将派生对象声明为类中的私有成员时发生编译错误
- C++中的优化(对象声明)
- C++ 中类之间的对象声明
- 成员对象声明的差异
- 如果将类的对象声明为另一个类的实例变量,则调用该类的构造函数