1.类的静态成员变量在所有类的实例中是共享的。它是全局数据与成员数据的折中。可以把静态成员变量看成是属于类而不是属于对象的。因此,对类的实例对象中并不会为静态成员变量留出存储空间。
一个常见的错误是忘记定义类的静态成员变量。若HowmanyCats是类Cat的静态成员变量,则其定义句为:
int Cat::HowmanyCats=0;
此外,若该静态成员变量是私有的,那么类必须为该静态成员变量提供一个公有的访问函数。对于没有对象的静态成员,则可以定义一个不属于类的全局函数来访问该成员变量。因此可以在没有对象的情况下访问类的静态成员变量。
2.静态成员函数没有this指针,因此它们不能声明为const,且静态成员函数不能访问任何非静态成员变量。
3.如同数组名,函数名是指向函数的常指针。函数指针的声明如下所示:
long (*FunPtr) (int);
第一对括号必须有,否则就不是函数指针的定义,而是一个返回指针的函数。使用函数指针就如同使用函数名一样。
FunPtr(x);
和
(*FunPtr)(x);
一样,前一种只是后一种的简化形式。
也可以把函数指针作为函数变量来传递。例如:
void Func (void ( * ) (int &, int &) , int &, int &);
可以用typedef来定义结构 void ( * ) (int &,int &)
typedef (*VPF) (int &,int &)
则 VPF可以用来代替以上结构体。
4.为创建成员函数指针,可以使用与函数指针创建相同的语法,但要包含类名和作用域运算符(::)。如:
void (Shape::*pFunc)(int ,int);
使用方法一样,只是需要一个类的对象。
评论