c++ - 创建对象作为私有(private)成员变量与在成员函数中

标签 c++ oop object private-members member-functions

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

Aclass.h

class Aclass{ 
private: 
    AnotherClass someobj1; //option 1
public:  
    void someMethod(); 
};

Aclass.cpp

void Aclass::someMethod(){ 
    AnotherClass someobj2; //option 2 
}

最佳答案

someobj1确实是一个成员变量。这意味着 AClass 的每个实例都包含一个名为 someobj1AnotherClass 实例,它与它所属的实例。

someobj2someMethod 函数的局部变量。它将在该函数结束时被销毁。

它们都不是全局的。也许您将它们与 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/

相关文章:

c# - 谁应该负责选择合适的派生类?

JavaScript:这个构造函数有什么问题?

java - 通过外部方法调用将对象作为参数传递

javascript - 这个键的值是一个数组吗?

C++ 入口点 -> main()

oop - Dart:泛型抽象静态方法

c++ - 编译时找不到Qt文件

java - 如何在 Java 中的对象参数中初始化数组?

同一接口(interface)的多个版本的 C++ 设计(头文件中的枚举/结构)

c++ - 使用泰勒方法 C++ 和循环计算 Pi