C语言中也用static来修饰变量,C++中除了修饰变量外还可以修饰类的成员。
下面演示静态成员变量的初始值、修改后的值和调用方法。
![]()
#include<iostream>#include<string>using namespacestd;classclassA {static intsx;staticstring sstr;public:static intsy;voidset(intx, string s) { sx = x; sstr = s; }voidprint() { cout << " x = " << sx ; cout << " y = " << sy ; cout << " s = " << sstr << endl; } }; //下面的申明是必须的,这样不会改变访问权限(public,private)intclassA::sx; string classA::sstr;intclassA::sy;intmain ( ) { classA ca1, ca2; cout << "ca1: ", ca1.print(); //实例1的初始值 cout << "ca2: ", ca2.print(); //实例2的初始值 ca1.set(25, "劝学网"); //设定实例1,实例2 也会改变 ca1.sy = 100; //公有静态成员可以通过实例来设定 cout << "ca1: ", ca1.print(); //实例1的设定值 cout << "ca2: ", ca2.print(); //实例2的设定值 ca2.set(80, "小雅"); //设定实例2,实例1 也会改变 classA::sy = 125; //公有静态成员也可以不通过实例来设定 cout << "ca1: ", ca1.print(); //实例1的设定值 cout << "ca2: ", ca2.print(); //实例2的设定值return0; }
小雅多年从事Java程序设计,按Java的经验,静态成员函数一般在公共程序中用的比较多。这样的程序与类自身关系不大,只是归类性质放在某个类中。还有一些与类转换或交换但不需要实例时使用的情况。
![]()
#include<iostream>using namespacestd;classInteger {public:static intatoi(const char*s) {return::atoi(s); }static floatatof(const char*s) {return::atof(s); } };intmain ( ) {intx = Integer::atoi("322");floaty = Integer::atof("3.14"); cout << "x = " << x << " y = " << y << endl;return0; }
和静态成员变量类似功能,当不允许修改时,要定义成常数。
![]()
#include<iostream>using namespacestd;classInteger {public:static const intMAX_LEN = 100;static const intMIN_LEN = 10; }; //以下的申明不需要 //int Integer::MAX_LEN; //int Integer::MIN_LEN;intmain ( ) { cout << "MAX_LEN = " << Integer::MAX_LEN << endl; cout << "MIN_LEN = " << Integer::MIN_LEN << endl;return0; }