本文摘自网络,作者php是最好的语言,侵删。
静态数据成员
?用关键字static声明
?当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本
?在类的所有对象中共享,具有静态生存期
?若不存在其他的初始化语句,在创建第一个对象时,所有的静态数据成员被初始化为零
?在类外定义和初始化,用范围解析运算符(::)来指明所属的类
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream>
using namespace std;
class Box {
public:
static int count; //若该静态数据成员在private部分声明,则只能通过静态成员函数处理
Box( double l = 2.0 , double b = 2.0 , double h = 2.0 ) {
cout << "One constructor was called." << endl;
length = l, width = b, height = h;
count++; //每创建一个对象时加 1
}
double Volume() {
return length * width * height;
}
~Box() { count--; }
private:
double length, width, height;
};
//初始化类Box的静态成员
int Box::count = 0 ;
int main(void) {
Box Box 1 ( 3.3 , 1.2 , 1.5 );
Box Box 2 ( 8.5 , 6.0 , 2.0 );
cout << "Total objects: " << Box::count << endl; //输出对象的总数
return 0 ;
}
|
静态成员函数
把成员函数声明为静态的,就可以把函数与类的任何特定对象独立开来
?在类对象不存在的情况下也能被调用,使用类名加范围解析运算符 :: 即可访问
?静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数
?静态成员函数有一个类范围,不能访问类的 this 指针,可以使用静态成员函数来判断类的某些对象是否已被创建
?用静态成员函数访问非静态成员,需通过对象
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <iostream>
using namespace std;
class Box {
public:
static int count;
Box( double l = 2.0 , double b = 2.0 , double h = 2.0 ) {
cout << "One constructor was called." << endl;
length = l, width = b, height = h;
count++;
}
double Volume() {
return length * width * height;
}
static int getCount() { //静态成员函数
return count;
}
private:
double length, width, height;
};
int Box::count = 0 ;
int main(void) {
//在创建对象之前输出对象的总数
cout << "Inital Stage Count: " << Box::getCount() << endl;
Box Box 1 ( 3.3 , 1.2 , 1.5 );
Box Box 2 ( 8.5 , 6.0 , 2.0 );
//在创建对象之后输出对象的总数
cout << "Final Stage Count: " << Box::getCount() << endl;
return 0 ;
}
|
注:
阅读剩余部分
相关阅读 >>
从事c/c++开发多年,给零基础想学习c/c++的几点建议
精选的这19道c/c+面试题,你能答对多少呢? - 个人文章 思否
c++ 判断本机是否有.net环境
c ++中accessor函数的特征
c语言 三种求回文数的算法
c语言比较三个数大小
c语言中for语句的执行过程是什么?
c语言的代码是什么?
“->” 在 c 语言什么意思?
c/c++函数如何返回多个值?(代码示例)
更多相关阅读请进入《c》频道 >>
转载请注明出处:木庄网络博客 » C++类的静态数据成员和静态成员函数