使用静态私有属性

时间:2014-10-27 18:17:05

标签: c++

我无法理解类中私有静态属性的使用:

- > private表示如果我正确

,则只能从类本身访问这些属性

- > static表示属性属于类本身而不是对象,如果我仍然正确,则允许在不创建对象的情况下访问它

因此,我无法想象是否使用了私有静态属性。

提前感谢您的任何帮助:)

谦信

4 个答案:

答案 0 :(得分:6)

您自己说过:如果您想要一个与该类关联但不属于任何对象(static)的变量,那么只能在类本身(private)内访问。

作为一个具体的例子,这里有一个计算自身实例的类:

class countable {
private:
    static unsigned count;
public:
    countable() {++count;}
    countable(const countable&) {++count;}
    ~countable() {--count;}

    static unsigned instance_count() {return count;}
};

答案 1 :(得分:3)

这是一个可以扩展你想象力的例子:

class Singleton
{
   public:
       static Singleton* getInstance();
       ~Singleton();
   private:
       Singleton();
       static Singleton* instance;
};

答案 2 :(得分:1)

这是另一个可能expand your imagination的例子:

class NotAThreadSafeExample {
public:
    NotAThreadSafeExample () { ++ debugReferenceCount; }
    ~NotAThreadSafeExample () { -- debugReferenceCount; }
    static int getDebugReferenceCount () { return debugReferenceCount; }
private:
    static int debugReferenceCount;
};

或者:

class Example {
private:
    static const int FIXED_COLUMN_WIDTH = 32;
};

或者甚至可能是这样的,在适当的时候atomicIncrement留给你的想象,例如Windows上的InterlockedIncrement()或GCC的__sync_add_and_fetch();相应地选择整数类型record_id_t) :

class Record {
public:
    Record () : id(atomicIncrement(&nextId)) { }
    record_id_t getId () const { return id; }
private:
    static volatile record_id_t nextId;
    record_id_t id;
};

或者您可以想象的任何其他用途,用于static变量,该变量无法在类或friend之外访问。

答案 3 :(得分:0)

friend类或函数可以访问此静态成员。