#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 : " ????;
}
答案 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