在类声明中创建对象作为私有(private)成员变量与在类的方法定义中创建对象有什么区别?我知道明显的区别是一个是全局变量,另一个是局部变量。什么情况下应该做前者,什么情况下应该做后者?
Aclass.h
class Aclass{
private:
AnotherClass someobj1; //option 1
public:
void someMethod();
};
Aclass.cpp
void Aclass::someMethod(){
AnotherClass someobj2; //option 2
}
最佳答案
someobj1
确实是一个成员变量。这意味着 AClass
的每个实例都包含一个名为 someobj1
的 AnotherClass
实例,它与它所属的实例。
someobj2
是 someMethod
函数的局部变量。它将在该函数结束时被销毁。
它们都不是全局的。也许您将它们与 static 成员变量混合在一起,这些变量具有静态生命周期(在 main
开始之前构造,在结束后销毁),就像全局变量一样(但它们是不完全是全局的,因为它们包含在类的范围内。
这是一个愚蠢的例子,可以让它完全清楚:
CatBasket gCatBasket; // All cats in the house share the same basket (global)
class Cat {
Tail _tail; // The tail is part of the cat (member)
Human *_owner; // The cat remembers his owner for his whole life (member)
void meow() {
MeowSound sound; // The "meow" sound only exists while the cat is meowing. (local)
sound.setAmplitude(17.0f);
sound.setPurr(true);
sound.play();
}
static bool _beACat;
};
bool Cat::_beACat = true; // Everybody wants to be a cat (static)
关于c++ - 创建对象作为私有(private)成员变量与在成员函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31154770/