C++ Primer Plus学习笔记之静态成员
关键字static可以用来说明一个类的成员(包括数据成员和成员函数),这样的成员被称为静态成员;
1,静态数据成员
在一个类中,若将一个数据说明前加上static,则该数据成为静态数据,静态数据成员被该类的所有对象共享。无论建立多少个该类的对象,都只有一个静态数据存储空间;
具体语法如下:
类型名 类名::静态数据成员[=常量表达式]
其中,常量表达式用于初始化类的静态数据成员;
静态数据成员属于类,而不属于对象,因为静态成员的存在是不依赖于某个具体的对象的。在这个意义下,在类对象不存在的情况下,我们也可以访问到类的静态成员。
2,静态成员函数
与静态数据成员一样,静态成员函数属于类而不是某个类对象;因此在类外调用一个共有的静态数据成员函数,不需要指明对象或者指向对象的指针,具体方式为:
类名::静态成员函数名(参数列表)
一般使用静态成员函数来访问静态数据成员;
若在静态成员函数中要访问非静态成员时,必须明确地指明该静态成员函数在哪个对象上操作,必须需要通过对象或者指向对象的指针进行,因此需要类类型作为静态成员函数的参数类型(出非使用全局对象);
#include<iostream> using namespace std; class Integer { public: void Display(); static void Fun(int num1,int num2,Integer *ptr); private: int member_int; static int static_int; }; int Integer::static_int=0; void Integer::Fun(int num1,int num2,Integer *ptr) { //member_int=num1; 错误,不知对哪个对象上的member_int进行操作 ptr->member_int=num1;//正确 static_int=num2;//正确 } void Integer::Display() { cout<<"member_int="<<member_int<<endl; cout<<"static_int="<<static_int<<endl; } int main(int argc,char *argv[]) { Integer obj; Integer::Fun(1,2,&obj);//正确,仅对静态成员函数正确 obj.Display(); obj.Fun(3,4,&obj);//正确 obj.Display(); return 0; }