C语言中也用static来修饰变量,C++中除了修饰变量外还可以修饰类的成员。
下面演示静态成员变量的初始值、修改后的值和调用方法。
#include
<iostream>#include
<string>using namespace
std;class
classA {static int
sx;static
string sstr;public
:static int
sy;void
set(int
x, string s) { sx = x; sstr = s; }void
print() { cout << " x = " << sx ; cout << " y = " << sy ; cout << " s = " << sstr << endl; } }; //下面的申明是必须的,这样不会改变访问权限(public,private)int
classA::sx; string classA::sstr;int
classA::sy;int
main ( ) { 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的设定值return
0; }
小雅多年从事Java程序设计,按Java的经验,静态成员函数一般在公共程序中用的比较多。这样的程序与类自身关系不大,只是归类性质放在某个类中。还有一些与类转换或交换但不需要实例时使用的情况。
#include
<iostream>using namespace
std;class
Integer {public
:static int
atoi(const char
*s) {return
::atoi(s); }static float
atof(const char
*s) {return
::atof(s); } };int
main ( ) {int
x = Integer::atoi("322");float
y = Integer::atof("3.14"); cout << "x = " << x << " y = " << y << endl;return
0; }
和静态成员变量类似功能,当不允许修改时,要定义成常数。
#include
<iostream>using namespace
std;class
Integer {public
:static const int
MAX_LEN = 100;static const int
MIN_LEN = 10; }; //以下的申明不需要 //int Integer::MAX_LEN; //int Integer::MIN_LEN;int
main ( ) { cout << "MAX_LEN = " << Integer::MAX_LEN << endl; cout << "MIN_LEN = " << Integer::MIN_LEN << endl;return
0; }