C++,私有static函数怎么调用

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,他就能在类外部使用了,

你那两种调用才会成功。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-04

  私有静态成员函数只允许在本类的成员函数内部或者友元内部调用。

  在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){//私有静态成员函数
        //...此处写加密算法,返回加密后的字符串
    }
};

第2个回答  2013-03-30
#include <iostream>
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<<m[0].getn(); //失败
cout<<mammal::getn();//失败
}

------------------
私有函数和私有成员一样类外不能调用
就比如你不能使用
cout<<m[0].n;
第3个回答  2013-03-31
private私有成员只能通过类自身的函数调用,用友元也可以,但使用对象和类名是不可以调用的
第4个回答  2013-03-31
私有的没法调用,除非你生命一个函数是他的友元
相似回答