class mammal
{
public:
mammal(){n++;}
~mammal(){n--;}
private:
static int getn(){return n;} static int n;
};
int mammal::n =0; void main()
{
mammal m[789];
cout<<m[0].getn(); //失败cout<<mammal::getn();//失败}====================================static既然是类共有的。为什么那两种调用全都失败。一个通过对象,一个通过类名。
原因出在你的static函数是private(私有的)
所以类外部不能调用的。
只有在类的内部,或都由这个类生成的对象的内部才能使用
你把他的权限改成public,他就能在类外部使用了,
你那两种调用才会成功。
私有静态成员函数只允许在本类的成员函数内部或者友元内部调用。
在C++类里,有这样的规则:
1、私有(private)成员是只希望在类的成员函数内部访问,不希望被类外面的任何地方访问的;公有(public)成员则是允许在类外面被访问;保护(protected)成员则是允许在本类和子类的成员函数内部访问。
2、无论哪一种,都允许在友元里访问,但这破坏了封装的初衷,因此尽量不要使用友元。
3、非静态成员提供的函数和变量是对象的组成成分,可以看成是每个对象各自独立有一份;静态(static)成员则是本类提供的共用函数和共用变量,不属于任何一个对象,可以看成是大家共用同一份。
一般来说,静态成员函数是用来提供一些通用工具功能的,比如数学运算,文件系统基本操作,因此经常是公有的。但是如果希望这是个秘密工具,可以定义成私有,只允许在本类的成员函数内部或者友元内部调用。
也就是说,私有静态成员函数只允许在本类的成员函数内部或者友元内部调用,但基本上不使用友元,只在本类的成员函数内部调用。
举个例子,一个用户类,密码是需要加密存储的,这个加密算法是所有用户统一的,但对外不公开,就可以写成私有静态成员函数。
class User{