C++——初始化静态成员自己的方法

C++——初始化静态成员自己的方法,c++,oop,methods,static,initialization,C++,Oop,Methods,Static,Initialization,是否可以使用自己的方法初始化静态成员,例如初始化 例如: class Foo { //some private variables public: static Bar example; //some methods } 然后在main.cpp中调用它,如: Foo::example.initialize(argument); 当然,这是行不通的。由于变量是公共的,所以它也缺少封装。我希望它是私有的,并且只初始化一次。除了使用方法初始化对象之外,我没有其他选择。初始化对象的默认方式应该是使用

是否可以使用自己的方法初始化静态成员,例如初始化

例如:

class Foo
{
//some private variables
public:
static Bar example;
//some methods
}
然后在main.cpp中调用它,如:

Foo::example.initialize(argument);

当然,这是行不通的。由于变量是公共的,所以它也缺少封装。我希望它是私有的,并且只初始化一次。除了使用方法初始化对象之外,我没有其他选择。

初始化对象的默认方式应该是使用其默认构造函数

如果真的需要,那么可以使用单例。请注意,这也是一种反模式


这将只初始化一次。

Define不起作用。你期望的结果是什么?你观察到了什么?从表面上看,我看不出这会成为问题的原因。如果您想将示例设置为私有,请在Foo上定义一个静态方法,该方法将反过来调用example.initializeI获取对main.cpp中'Foo::example'的未定义引用。这是另一个问题。您只声明了示例,还需要定义它。在一些.cpp not.h文件中,编写Bar Foo::example;哦,这就是它不起作用的原因。此外,静态方法提示也非常有用。谢谢。imho封装和public是正交的,但我知道我对封装有一些粗略的看法;
class Singleton
{
public:
    static const Bar& getBarInstance()
    {
        static Bar bar;

        return bar;
    }
};