//使用静态成员的好处:
//与全局比较:
//1. 减少命名空间占用
//2. 函数可以封装公有,私有
class A
{
public:
//静态成员函数没有this指针
//使用无需类对象
static void StaticFun(int nNum)
{
cout << nNum << endl;
//1.静态成员函数只能静态数据成员
//m_nNumber = 2; //error
m_nNumber2 = 0;
}
void fun()
{
m_nNumber2 = 4;
m_nNumber = 1;
}
private:
int m_nNumber;
public:
//C++标准规定,静态数据成员要使用
//必须先初始化
//数据在全局数据区,不占用类的空间
//不属于一个对象,所有对象共享
//使用无需类对象
static int m_nNumber2;
public:
static char* strcpy(char *, const char *)
{
//同一个类型访问没有公有,私有限制
strcat();
return "Hell";
}
private:
//静态成员函数可以公有私有
static void strcat()
{
}
public:
void Test()
{
strcat();
//这个静态成员函数只能被这个类使用,不能被外部使用
}
};
int A::m_nNumber2 = 1;
//数据成员的初始化
//类成员函数指针
typedef void (A::*FUNTYPE)();
//普通函数指针
typedef void (*STATIC_FUNTYPE)(int);
int main(int argc, char* argv[])
{
//静态成员函数指针,根普通函数指针类型一致
STATIC_FUNTYPE pfunStatic = A::StaticFun;
cout << pfunStatic << endl;
FUNTYPE pfun = A::fun;
cout << "0x" << hex << (int&)pfun << endl;
A theA;
theA.fun();
//静态成员函数的调用方式
A::StaticFun(3); //1.调用方式
theA.StaticFun(2); //2.调用方式
//静态数据成员的调用
cout << A::m_nNumber2 << endl;
cout << theA.m_nNumber2 << endl;
//静态数据成员在全局数据区
A the1, the2, the3;
cout << &the1.m_nNumber2 << endl;
cout << &the2.m_nNumber2 << endl;
cout << &the3.m_nNumber2 << endl;
cout << &A::m_nNumber2 << endl;
cout << sizeof(A) << endl;
cout << A::strcpy(NULL, NULL) << endl;
//A::strcat();
return 0;
}
|