您的位置:首页 > 编程语言 > C语言/C++

C++为什么要引入静态成员函数

2016-03-14 14:39 253 查看
在静态成员函数出来之前就已经有了静态成员变量。静态成员变量是为了为用户提供在类级别上访问,而不是类对象有关的数据。静态成员变量在编译期就存在了,而不像非静态成员变量只有实例化了对象才会给分配内存。静态成员变量是所有类对象共享的,例如,我们可以为类定义一个 static int n 来统计实例化了多少个对象,对象构造时 n++ , 析构时 n– 。

但是,如果为类定义的静态成员变量是私有的(不希望暴露在类外),就会遇到下面的问题:

class A
{
private:
static   int   n;
int            b;
};


如果,我现在想在类外访问 n , 怎么办呢?

只能定义一个public 成员函数了:

class  A
{
public:
int get_n()
{
return  n;
}
private:
static  int   n;
int           b;
};

...

A   a;
a.get_n();


然后实例化一个对象来调用public 成员函数。但是,只是为了访问一个变量就实例化整个对象出来,是不是有点浪费资源呢?况且有些场景下这样做并不能解决问题。

还有一种方法,据说以前程序员都是使用下面的方式:

((A*)NULL)->get_n();


看起来不错,这样不需要实例化对象出来就达到了目的。但其实这样做很不安全,如果我在 get_n 成员函数中不小心使用了非静态成员变量b , 因为非静态成员只有实例化了对象才会给分配内存,这就会导致正在运行的程序崩溃。但是编译器却不会给报错,留下了安全隐患。

因此,后来C++引入了静态成员函数。

静态成员函数可以直接通过类名访问,也可以使用对象访问。不允许在静态成员函数中使用非静态成员函数和非静态成员变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 静态成员函数