将对象创建为私有成员变量与成员函数

han*_*bal 1 c++ oop object member-functions private-members

在类声明中创建对象作为私有成员变量和在类的方法定义中创建对象有什么区别?我知道明显不同的是,一个是全局变量,另一个是局部变量.我应该在什么情况下做前者和后来?

Aclass.h

class Aclass{ 
private: 
    AnotherClass someobj1; //option 1
public:  
    void someMethod(); 
};
Run Code Online (Sandbox Code Playgroud)

Aclass.cpp

void Aclass::someMethod(){ 
    AnotherClass someobj2; //option 2 
}
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

someobj1确实是一个成员变量.这意味着每个实例都AClass 包含一个AnotherClassnamed 实例someobj1,它与它所属的实例具有相同的生命周期.

someobj2someMethod函数的局部变量.它将在所述功能结束时销毁.

他们都不是全球性的.也许你正在将它们与静态成员变量混合在一起,静态成员变量具有静态生命周期(在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)
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,保持变量的范围始终尽可能小(封装)是一个很好的做法。因此,如果选项 2 可行,则它是首选选项。 (2认同)