class AA
{
public:
AA(int a, int b)
{
m_a = a;
m_b = b;
}
int getC()
{
m_c++;
return m_c;
}
//静态的成员方法
static int& getCC()
{
return m_c;
}
private:
//static修饰的静态成员变量
static int m_c;
int m_a;
int m_b;
};
//静态成员变量的初始化,一定类的外边。
int AA::m_c = 100;
int main(void)
{
AA a1(10, 20);
AA a2(100, 200);
cout << a1.getC() << endl;//101
cout << a2.getC() << endl;//102
//a1.getCC() = 200;
AA::getCC() = 200;
cout << a1.getC() << endl;//201
cout << a2.getC() << endl;//202
return 0;
}
如果static成员变量是私有变量那么将不能通过类名::变量名访问(int AA::m_c = 100;),只能通过静态方法来间接访问。静态成员的初始化不能在类中初始化,一定要在类外初始化。
静态成员方法只能访问类的静态成员,不能访问类的其他非静态成员。 分文件来实现static成员变量和方法有几个注意的地方(c++ 11).h文件代码片段
class Ch32Socket {
private:
int socket_;
struct sockaddr_in sockAddr_;
public:
static float sinAngles_[];
static float cosAngles_[];
static float sinTheta0_[] ;
static float sinTheta1_[] ;
static void initAngle(void);
Ch32Socket();
Ch32Socket(int port,std::string ipAddr);
~Ch32Socket();
};
.cpp文件代码片段
#include "ch32_socket.h"
float Ch32Socket::sinAngles_[3700] ={0};
float Ch32Socket::cosAngles_[3700] ={0};
float Ch32Socket::sinTheta0_[32] ={0};
float Ch32Socket::sinTheta1_[32] ={0};
void Ch32Socket::initAngle(void){
for (int i = 0; i < 37000; i++)
{
sinAngles_[i] = sin(i * CV_PI / 18000);
cosAngles_[i] = cos(i * CV_PI / 18000);
}
for (int i = 0; i < 32; i++)
{
float theta0 = -6.67 + (int(i / 4)) * 1.33;
float theta1 = (i % 4) * 0.33;
sinTheta0_[i] = sin(theta0 * CV_PI / 180);
sinTheta1_[i] = sin(theta1 * CV_PI / 180);
}
}
需要在.h文件中 声明
static float sinAngles_[];
然后在.cpp文件中初始化
float Ch32Socket::sinAngles_[3700] ={0};后.cpp中的static静态方法才能使用。
以下借鉴:C++ Static Member Variable Initialization 静态成员变量初始化 - Roger Luo - 博客园
对于STL容器静态变量,初始化方法比较复杂,需要借助一个静态构造函数,通过拷贝构造函数来实现初始化
simple.h定义为:
#include
simple.cpp定义为:
bool Simple::Find(int key)
{
INT2INT::iterator it = _i.find(key);
if (it == _i.end())
return false;
return true;
}
INT2INT Simple::CreateMap(void)
{
INT2INT _tmp;
return _tmp;
}
INT2INT Simple::_i(Simple::CreateMap());



