# 靜態數據成員
## 特點
* 靜態數據成員是被該類的所有成員共享的,不屬于某個對象
* 為對象創建空間時,靜態數據成員分配空間在數據區,其他成員分配在棧區
* 分配時機提前,類定義好了,該靜態數據成員就分配好了
* 靜態數據成員在類體外初始化,函數體之外初始化
## 聲明
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 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類