C++中常資料的使用及初始化

1分快3平臺最高邀請碼88886486發表於2021-02-14

常資料成員的使用及初始化

常的概念我們在學C語言時候就有了解,關鍵字是const,所謂的“常”,或或者說被“常”修飾的變數,是不可修改、被改變的,比如用const修飾的一個變數就成了常變數,這個值不可被更改。

那麼C++中,一樣有常的概念,額外不同的是,const除了可以修飾一般的變數為常變數之外,還可用於修飾某個物件,變成常物件。以及可以修飾類的資料成員和成員函式,分別叫做類的常資料成員和常成員函式。

下面,我們依次對常資料成員、常成員函式、常物件展開講解。

  1. 常資料成員

對於常資料成員的用法,與我們在C語言的用法一樣,只不過這部分資料出現在類裡,使用的格式如下:

資料型別 const 資料成員名;

或 const 資料型別 資料成員名;

被const修飾的成員則必須進行初始化,並且不能被更改。

而初始化的方式則是在類的建構函式的初始化列表裡進行的。

另外,有一個特殊情況,如果成員是static型別,即靜態常資料成員,因為是靜態的屬性,初始化則需在類外進行初始化。

下面我們把剛才講的情況放到程式碼裡來說明:

include

using namespace std; class Clock { private: const int h; //修飾h為常型別成員 const int m; //修飾m為常型別成員 int const s; //和上面兩種用法都可以 static const int x; public: Clock(int a,int b,int c):h(a),m(b),s(c) { cout<<"Constrctor! Called"<

執行演示結果:

changshuju.png

大家注意看類中的四個常資料成員,其中X為static型別,因其靜態化的特殊屬性則需要在類外初始化,即便X為私有型別!

2.常物件

C++中可以把一個物件宣告為const型別,即常物件。這樣宣告之後,這個物件在整個生命週期中就不可以再被更改,所以在定義的時候要由建構函式進行初始化。

定義格式如下:

型別 const 物件名;

或 const 型別 物件名;

需要注意的是,常物件不可以訪問類中的非常成員函式,只能訪問常成員函式(後面第三部分)。下面我們看例子:

include

using namespace std; class Clock { private: const int h; //修飾h為常型別成員 const int m; //修飾m為常型別成員 int const s; //和上面兩種用法都可以 int x; public: Clock(int a,int b,int c):h(a),m(b),s(c) { x=99; cout<<"Constrctor! Called"<

int main() { const Clock A(12,10,30); const Clock B(14,20,50); //A = B; //A.ShowTime(); A.GetX(); return 0; } 注意看程式碼中39,40行的語句,正常編譯將報錯,原因是A為常物件不可以被賦值,以及ShowTime函式為非常成員函式。而41行的程式碼則可以執行,效果如下:

changduixiang.png

3常成員函式

類似的,一個類中的成員函式被const修飾後,就變成了常成員函式,常成員函式的定義如下:

返回型別 函式名(形參表列)const;

需要注意:

常成員函式的定義和宣告部分都要包含const;

常成員函式只能呼叫常成員函式,而不能呼叫非常成員函式,訪問但不可以更改非常成員變數。

比如如下程式碼:

include

using namespace std; class Clock { private: const int h; //修飾h為常型別成員 const int m; //修飾m為常型別成員 int const s; //和上面兩種用法都可以 int x; public: Clock(int a,int b,int c):h(a),m(b),s(c) { x=99; cout<<"Constrctor! Called"<

int main() { const Clock A(12,10,30); A.GetX(); return 0; } 注意第29、30行程式碼,如果使用29行程式碼則會編譯報錯,實際執行效果如下:

changfangfa.png

C++中常概念的建立,明確了程式中各物件的變與不變的邊界,也加強了C++程式的安全性和可控性。

請大家自行上機實驗。

相關文章