首页 > 代码库 > 类成员函数[转]

类成员函数[转]

类成员函数

除了static数据成员,类还可以有static成员函数。静态成员函数只能访问其他的static成员,包括数据成员和成员函数。

例3-38

 

本例声明了一个内联的static成员函数getN。在例3-35中,我们知道对象和非静态成员函数(包括构造函数和析构函数)可以访问像n这样的static数据成员。在本例中,我们看到static成员函数也可以访问static数据成员。它们的差别是,非static成员函数既可以访问static数据成员,也可以访问非static数据成员;而static成员函数只能访问static成员。因此,以下代码包含了两个错误:

 

static成员函数getN只能访问static数据成员和static成员函数,而setST和st都是非static。像其他的成员函数一样,static成员函数既可以是inline函数,也可以是非inline函数。

假设类C拥有一个static数据成员sVar和一个static成员函数sMeth,它们都是公有的,如下所示:

 

有两种不同方式来访问类的static成员,我们既可以通过C的对象来访问,也可以直接通过类C来访问。

例3-39

本例展示了两种访问static成员的不同办法。当然,这样做违反了数据成员的信息隐藏原则,我们将sVar设为public仅仅是为了说明访问静态成员的语法。

访问static成员的首选方法是通过类直接访问。static成员毕竟是与类本身相关联,而不是与类的对象相关联。

我们作如下假定:

对象c属于类C。

成员函数om是C的非static成员函数。

成员函数cm是C的static成员函数。

那么,静态成员函数与非静态成员函数的区别如表3-2所示。

表3-2   类成员函数与对象成员函数的比较