# 静态数据成员
## 特点
* 静态数据成员是被该类的所有成员共享的,不属于某个对象
* 为对象创建空间时,静态数据成员分配空间在数据区,其他成员分配在栈区
* 分配时机提前,类定义好了,该静态数据成员就分配好了
* 静态数据成员在类体外初始化,函数体之外初始化
## 声明
static 类型 名称
## 例子
~~~
#include <iostream>
using namespace std;
class Box
{
public:
Box(int,int);
int volume( );
static int height;
//把height定义为公用的静态的数据成员
int width;
int length;
};
Box∷Box(int w,int len) //通过构造函数对width和length赋初值
{
width=w;
length=len;
}
int Box∷volume( )
{
return(height*width*length);
}
int Box∷height=10; //对静态数据成员height初始化
int main( )
{
Box a(15,20),b(20,30);
cout<<a.height<<endl;
//通过对象名a引用静态数据成员
cout<<b.height<<endl;
//通过对象名b引用静态数据成员
cout<<Box∷height<<endl;
//通过类名引用静态数据成员
cout<<a.volume( )<<endl;
//调用volume函数,计算体积,输出结果
}
~~~
# 静态成员函数
## 声明
static 类型 函数名();
为了更方便的访问静态数据成员
## 例子
~~~
include <iostream>
using namespace std;
class Student //定义Student类
{
public:
Student(int n,int a,float s):num(n),age(a),score(s){ }//定义构造函数
void total( );
static float average( ); //声明静态成员函数
private:
int num;
int age;
float score;
static float sum; //静态数据成员
static int count; //静态数据成员
};
void Student∷total( ) //定义非静态成员函数
{
sum+=score; //累加总分
count++; //累计已统计的人数
}
float Student∷average( ) //定义静态成员函数
{
return(sum/count);
}
float Student∷sum=0; //对静态数据成员初始化
int Student∷count=0; //对静态数据成员初始化
int main( )
{
Student stud[3]={ //定义对象数组并初始化
Student(1001,18,70),
Student(1002,19,78),
Student(1005,20,98)
};
int n;
cout<<″please input the number of students:″;
cin>>n; //输入需要求前面多少名学生的平均成绩
for(int i=0;i<n;i++) //调用3次total函数
stud[i].total( );
cout<<″the average score of ″<<n
<<″ students is ″
<<Student∷average( ) //调用静态成员函数
<<endl;
return 0;
}
~~~
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类