c 學習之 類中的常成員與靜態成員

2021-08-09 13:14:19 字數 2846 閱讀 5268

1.類中的所有成員都不能在定義時初始化,只能在建構函式時初始化

2.

#include 

using

namespace

std;

class circlepool // 定義1個圓形水池類circlepool

// 建構函式

// 修改3:初始化後,不能再設定或修改price,刪除函式setprice

void setprice( double x ) // 設定建造單價

double getprice( ) // 讀取建造單價

// ...... 其它**省略

} ;int main( ) // 主函式:測算養魚池工程總造價

常資料成員的語法細則

–關鍵字const。在類定義中宣告常資料成員需使用關鍵字const進行限定,宣告時不能初始化

–初始化列表。類中的任何函式都不能對常資料成員賦值,包括建構函式。為建構函式新增初始化列表是對常資料成員進行初始化的唯一途徑。在建構函式的函式頭後面新增初始化列表:

建構函式名( 形參列表 ) : 常資料成員名1( 形參1 ), 常資料成員名2( 形參2 ), ……

形參1、形參2等是從形參列表中提取出來的,並在初始化列表中進行二次接力傳遞

–定義物件時初始化。定義含常資料成員類的物件時需要初始化,給出常資料成員的初始值

3.常函式成員

只能呼叫類裡的資料成員,不能賦值、修改

常函式成員

–內聯函式

double getcost( ) const

–非內聯函式

double getcost( ) const ; // 宣告

double circlepool :: getcost( ) const // 實現

常函式成員的語法細則

–宣告、定義常函式成員需在函式頭後面加關鍵字const進行限定

–常函式成員只能讀類中的資料成員,不能賦值修改

–常函式成員只能呼叫其它常函式成員。換句話說,常函式成員不能呼叫其它無const限定的函式成員,以防這些函式間接修改了資料成員

–通過常物件只能呼叫其常函式成員。換句話說,通過常物件不能呼叫無const限定的函式成員,以防這些函式間接修改了常物件的資料成員

–除形參個數、型別之外,還可以用關鍵字const區分類中的過載函式

4.靜態資料成員:

靜態資料成員的語法細則

–關鍵字static。在類定義中宣告靜態資料成員需使用關鍵字static進行限定,宣告時不能初始化。例如,例7-12中的**第6行

–定義及初始化。必須在類宣告的大括號外面(通常是和函式成員定義一起放在類實現部分)對靜態成員進行定義,定義時不能再加關鍵字static。定義時可以初始化。例如,例7-12中的**第12行

–在同類函式成員中訪問。在同類的函式成員中訪問靜態資料成員直接使用其成員名訪問,訪問時不受許可權約束

–在類外其它函式中訪問。在類外其它函式(例如主函式)中訪問靜態資料成員需以「類名 :: 靜態資料成員名」的形式訪問,或通過任何乙個該類物件以「物件名.靜態資料成員名」的形式訪問。類外訪問受許可權約束,只能訪問公有的靜態資料成員

–生存期及作用域。和全域性變數一樣,靜態資料成員是靜態分配的,程式載入後立即分配記憶體,直到程式執行結束退出時才被釋放。訪問許可權決定靜態資料成員的作用域。私有靜態資料成員具有類作用域,只能在類內訪問。公有靜態資料成員具有檔案作用域,可以被本檔案中的任何函式訪問,並且可通過類宣告將其作用域擴充套件到任何程式檔案

#include 

using

namespace

std;

class circlepool // 定義1個圓形水池類circlepool

// 修改2:建構函式

// ...... 其它**省略

} ;double circlepool :: price = 10; // 修改3:在類外定義、初始化,定義時加「類名::」

int main( ) // 主函式:測算養魚池工程總造價

靜態函式成員:只能訪問類中的靜態資料成員或呼叫類中的其他靜態函式成員

static

double getprice( ) ; // 宣告

double circlepool :: getprice( ) // 實現

靜態函式成員的語法細則

–宣告時使用關鍵字static進行限定,定義時不能再使用關鍵字static

–靜態函式成員只能訪問類中的靜態資料成員,因為靜態函式成員可以不定義物件直接呼叫,而非靜態資料成員只有在定義物件後才分配記憶體空間,才能訪問。同樣道理,靜態函式成員不能呼叫其它非靜態函式成員

–類中的其他函式成員呼叫靜態函式成員直接使用其函式名呼叫,呼叫時不受許可權約束

–在類外呼叫靜態函式成員需以「類名 :: 靜態函式成員名( )」的形式呼叫,或通過任何乙個該類物件以「物件名.靜態函式成員名( )」的形式呼叫。類外呼叫受許可權約束,只能呼叫公有的靜態函式成員

–靜態函式成員不能是內聯函式,因為編譯器在編譯時會調整內聯函式,此時所訪問的靜態資料成員可能還未初始化,因此其資料是不可靠的,此時訪問會導致程式的執行結果出錯

class math

;double math :: pi = 3.1415926;

double math :: sin( double x ) ;

double math :: cos( double x ) ;

......

cout

<< math :: pi << endl;

cout

<< math :: sin(2) << endl;

C 靜態成員與常成員

對於非靜態成員,乙個類的每個物件都自己存有乙個副本,每個物件根據自己擁有的非靜態的資料成員來區別於其他物件。而靜態成員則解決了同乙個類的多個物件之間資料和函式的共享問題。靜態資料成員的作用是 實現同一類的不同物件之間的資料共享。include using namespace std class po...

C 之類的靜態成員

類的靜態成員 用關鍵字static宣告 為該類的所有物件共享,靜態資料成員具有靜態生存期。必須在類外定義和初始化,用 來指明所屬的類。include using namespace std class point point point p point intgetx intgety void sh...

學習C 2 之類的靜態成員及靜態成員函式

關鍵字 static 可以用於說明乙個類的成員,靜態成員提供了乙個同類物件的共享機制,把乙個類的成員說明為 static 時,這個類無論有多少個物件被建立,這些物件共享這個 static 成員,靜態成員區域性於類,它不是物件成員。建立與初始化 classx intx s 0 include clas...