首页 > 编程 > C++ > 正文

C++-静态成员

2019-11-08 01:33:01
字体:
来源:转载
供稿:网友

静态成员的生命及意义

静态成员遵守访问权限的限定规则。 static type dataname;

静态成员数据时属于类的,整个类只有一份拷贝,相当于类的全局变量,供该类所有对象共用,能够被该类的所有对象所访问;非静态成员数据是属于对象的,每个对象都有非静态成员数据的一份拷贝,为该对象专用。

静态成员函数也是属于整个类的,它只能访问属于该类的静态成员(包括静态成员数据和静态成员函数)。

静态成员的定义

在类的声明中将数据成员指定为静态成员,只是一种声明,并不会为该数据成员分配内存空间,在使用之前应该对它进行定义。静态数据成员常常在类外进行定义: 类型 类名::静态成员名 类型 类名::静态成员名=初始值; 例如:

#include <iostream>using namespace std;class A { static int a; public: int get() { return a; }};int A::a = 1;int main () { A a; cout << a.get() << endl; return 0;}

注意: 1、在类外定义数据成员时,不能加上static限定词; 2、在定义静态数据成员时可以指定初始值,若没有则默认为0.

原则上类的静态数据成员必须在类外定义,否则就会出错,若没有,则会在定义该类的第一个对象时定义相关的静态数据成员,即为所有的静态数据成员分配内存空间,并初始化为0。 换句话说,静态成员和全局变量一样,只是编译器将其限制在类作用域内了。

静态成员的访问

静态成员属于整个类,如果将它定义为类的公有成员,就可在类外用下面两种方式访问: 1、通过类名访问(非静态不可以) 类名::静态数据成员名; 类名::静态成员函数名( ); 2、通过对象访问 对象名.成员名

例如: 一个book类,每一个对象表示一本书。书的总本数和总价格会动态变化,如果不将其设置为静态数据成员,只有通过全局变量才能实现这样的功能,但全局变量会破坏类的封装性,给程序维护带来负担,也可能会误改。因为静态成员函数属于整个类,不论通过哪个对象调用到的静态成员函数都是相同的,因此建议通过以 类名::静态成员函数名( ); 的方式来调用以区别普通成员函数。

说明: 1、静态成员函数可以在类内部或外部定义,还可以定义成内联函数; 2、静态函数只能访问静态成员; 3、在类外定义静态成员函数时,不能加上static限定词; 4、静态成员函数可以在定义类的任何对象之前被调用,非静态成员只有在定义对象后,通过对象才能访问。

补充文章


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选