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