(1)
静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中
不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行
静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员
main()
{
base a;
derived b;
a._num++;
cout<<"base class static data number _num is"<<a._num<<endl;
b._num++;
cout<<"derived class static data number _num is"<<b._num<<endl;
}
// 结果为1,2;可见派生类与基类共用一个静态数据成员
(2)
函数不是对象,它代表的是一段代码,位于代码段,而不是位于静态存储区——静态存储区是数据区的一种,用来存放在程序中定义的静态对象。
静态成员函数没有this指针,只能访问静态变量
1.对类的静态和非静态函数的不同的调用要求决定了它们在使用上的方便程度:非静态成员函数要通过对象调用,所以要求首先建立一个对象;而静态成员函数可不建立对象就可以被使用。因此,与类的非静态数据成员无关的成员函数,虽然可以被定义为非静态函数,但是如果定义为静态函数的话在使用上会更加方便。
一般函数
CCLP *pclp = new CCLP;
pclp->YourProceudre();
静态函数
CCLP::staticprocedure();
2.如果类的成员函数想作为回调函数来使用,一般情况下只能将它定义为静态成员才行。
3.光靠类中”其他“函数,不能将类中的某个“其他”函数当作线程的入口地址