【问题标题】:C++ - initializing static member its own methodC++ - 初始化静态成员自己的方法
【发布时间】:2018-10-06 01:28:06
【问题描述】:

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

例子:

class Foo
{
//some private variables
public:
static Bar example;
//some methods
}

然后在 main.cpp 中像这样调用它:

Foo::example.initialize(argument);

当然不行。它也缺乏封装,因为变量是公共的。我希望它是私有的并且只初始化一次。除了用方法初始化它,我别无选择。

【问题讨论】:

  • 定义“不起作用”。你期待什么结果,你观察到了什么?从表面上看,我看不出它会成为问题的原因。如果您想将example 设为私有,请在Foo 上定义一个静态方法,该方法会转身并调用example.initialize()
  • 我在 main.cpp 中得到“未定义的对 `Foo::example' 的引用”。
  • 这是一个单独的问题。您只声明了example - 您还需要定义它。在一些.cpp(不是.h)文件中,写Bar Foo::example;
  • 哦,这就是它不起作用的原因。静态方法提示也非常有帮助。谢谢。
  • imho 封装和 public 是正交的,但我知道我对封装有一些粗略的看法;)

标签: c++ oop methods static initialization


【解决方案1】:

初始化对象的默认方式应该是它的默认构造函数。

如果确实需要,那么可以使用单例(注意它是一种反模式:What is an anti-pattern?,也可以是 What is so bad about singletons?

class Singleton
{
public:
    static const Bar& getBarInstance()
    {
        static Bar bar;

        return bar;
    }
};

这只会被初始化一次。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多