c ++获取在类中构建的对象数

时间:2016-03-14 12:41:27

标签: c++ class

那边有, 在此类的构造函数中,m_id的值增加1,从而计算构造的端口数。但是,我试图独立访问s_id的值,即没有“获取”对象。这样做了吗?我附上了代码。如果这是一个不够具体的问题,我会提前道歉。 感谢您抽出宝贵时间来了解一下。

#include <iostream>
#include <string>

class Port
{
public:
    // Default constructor 
    Port():m_state(false), m_month("     "), m_id( generateID() )
    {}

    // Value constructor
    Port(bool state, std::string month) : m_state(state), m_month(month),    m_id( generateID() )
    {}

    // Getter
    void getPort() const
    {
        std::cout << "Port : " << std::boolalpha << m_state
        << " \tMonth : " << m_month
        << "\tUnique ID : " << m_id << '\n';
    }

    // Putter
    void putPort(bool state, std::string month)
    {
        m_state = state;
        m_month = month;
    }

private:
    static int s_id;      // static counter
    int m_id;             // counter value of object
    bool m_state;         // bool for state of port
    std::string m_month;  // month port turned on

    // method to create counter value of object
    int generateID ()     
    {
        static int s_id = 0;
        return ++s_id;
    }
};

int main() {

    Port port1;
    Port port2(true, "March");

    port1.getPort();
    port2.getPort();

    port1.putPort(true, "March");

    port1.getPort();
    port2.getPort();

    Port port3;
    Port port4;

    port3.getPort();
    port4.getPort();

    // This is where I get stuck?
    //std::cout << "Number of ports : " ????;  
}

3 个答案:

答案 0 :(得分:2)

首先,如果你在多线程系统中工作,你可能想要使用std::atomic

其次,你是&#34;问题&#34;是你将s_id定义为私有。如果您将其更改为公开或具有公共静态功能来访问它,那么您就可以了。

答案 1 :(得分:2)

是的,您可以在没有类实例的情况下访问静态类成员。

Port::s_id

但是,您必须将其设为public,或提供静态访问器功能。

答案 2 :(得分:1)

添加静态公共方法:

static int GetID() {
   return s_id;
}

然后调用它:

Port::GetID()

获取你的s_id