類中是否能夠定義const成員?
下面的類定義是否合法?
若是合法,ci的值是什麼,存儲在哪裏?
class Test
{
private:
const int ci;
public:
int getCI() { return ci; }
}編程
編程實驗:類中是否能夠存在const成員?函數
1 #include <stdio.h>
2
3 class Test 4 { 5 private: 6 const int ci; 7 public: 8 Test() 9 { 10 ci = 10; 11 } 12 int getCI() 13 { 14 return ci; 15 } 16 }; 17
18
19 int main() 20 {
25 return 0; 26 }
上面的程序能夠編譯成功,說明類中能夠定義const成員。spa
接下來再看:code
1 #include <stdio.h>
2
3 class Test 4 { 5 private: 6 const int ci; 7 public:12 int getCI() 13 { 14 return ci; 15 } 16 }; 17
18
19 int main() 20 { 21 Test t; 23 printf("t.ci = %d\n", t.getCI()); 24
25 return 0; 26 }
編譯時會出錯:對象
21:error: structure 't' with uninitialized const membersblog
在類中能夠定義const成員變量,可是經過類來定義對象的時候就會報錯。提示有未初始化的const成員,所以面臨的問題變成了如何初始化一個類中的const成員。ci
解決方式:能夠在類中添加構造函數,是否可行呢?能夠試試get
1 #include <stdio.h>
2
3 class Test 4 { 5 private: 6 const int ci; 7 public: 8 Test() 9 { 10 ci = 10; 11 } 12 int getCI() 13 { 14 return ci; 15 } 16 }; 17
18
19 int main() 20 { 21 Test t; 22
23 printf("t.ci = %d\n", t.getCI()); 24
25 return 0; 26 }
編譯又出錯了,提示:it
8: error: uninitialized member 'Test::ci' with 'const' type 'const int'
10:error: assigment of read-only data-member 'Test::ci'io
ci 是隻讀的,不能放在賦值號的左邊。
能夠得出一個結論,若是要初始化const成員變量,就得在第8行進行。那麼在第8行如何進行呢?此時初始化列表就須要閃亮登場了。
C++中提供了初始化列表對成員變量進行初始化
語法規則
ClassName::ClassName() :
m1(v1), m2(v1,v2), m3(v3)
{
// some other initialize operation
}
1 #include <stdio.h>
2
3 class Test 4 { 5 private: 6 const int ci; 7 public: 8 Test() : ci(10) 9 { 10
11 } 12 int getCI() 13 { 14 return ci; 15 } 16 }; 17
18
19 int main() 20 { 21 Test t; 22
23 printf("t.ci = %d\n", t.getCI()); 24
25 return 0; 26 }