C++類的一個重要成員:靜態成員(二)——靜態成員的定義
阿新 • • 發佈:2020-08-11
寫在前面
【目錄】
1 #include <iostream> 2 3 class student 4 { 5 public : 6 const static int grade = 100; 7 static int score; 8 static int number; 9 static void print_welcome(); 10 int phone; 11 12private : 13 int age = 999; 14 15 }; 16 17 int student::score = 111; 18 int student::number = 222; 19 20 void student::print_welcome() 21 { 22 std::cout<<"welcome welcome!!"<<std::endl; 23 std::cout<<"grade:"<<grade<<std::endl; 24 //std::cout<<"age:"<<student::age<<std::endl;25 std::cout<<"score:"<<score<<std::endl; 26 std::cout<<"score:"<<student::score<<std::endl; 27 28 } 29 30 //main app 31 int main() 32 { 33 student stu; 34 35 std::cout<<"classObject stu size:"<<sizeof stu<<std::endl; 36 37std::cout<<"class student grade:"<<student::grade<<std::endl; 38 std::cout<<"class student score:"<<student::score<<std::endl; 39 std::cout<<"class student number:"<<student::number<<std::endl; 40 std::cout<<"classObject stu phone:"<<stu.phone<<std::endl; 41 42 student::print_welcome(); 43 }
一些思考:
(1)上圖第6行,如果去掉const,這份程式碼能編譯通過嗎?
(2)對於上圖的第10行程式碼,在程式40行輸出該值,該值是多少呢?
(3)上圖25、26行程式碼,輸出值一樣嗎?
(4)上圖如果取消24行的註釋,這份程式碼能編譯通過嗎?
(5)上圖35行程式碼的輸出值是多少呢?
(1)對於靜態成員函式:
和其他成員函式一樣,既可以在類的內部也可以在類的外部定義靜態成員函式。(注意:當在類的外部定義靜態成員時,不能重複static關鍵字,該關鍵字只能出現在類內部的宣告語句中)。
如何定義靜態成員函式:
1 void student::print_welcome() 2 { 3 std::cout<<"welcome welcome!!";4 }
(2)對於靜態資料成員:
因為靜態資料成員不屬於類的任何一個物件,所以它們不是在建立類的物件時被定義。故靜態資料成員不是由建構函式初始化的。(注意:一般來說,不能在類的內部初始化靜態成員,必須在類的外部定義和初始化每個靜態成員,一個靜態資料成員只能被定義一次)。
靜態資料成員的生命週期:
與全域性變數類似,靜態資料成員定義在任何函式之外。因此一旦被定義,將一直存在於程式的整個生命週期中。
如何定義並初始化一個靜態成員:
1 int student::score = 111;
通常情況下,類的靜態成員不應該在類的內部初始化。但是,可以為靜態成員提供const整數型別的類內初始值,不過需要靜態成員變數必須是字面值常量型別的constexpr。例如如下程式碼:
1 const static int grade = 100;
關於本文:本文所有知識點來源於《C++Primer第五版》