Posted on 2007-02-09 22:21
softgamer 閱讀(4271)
評論(10) 編輯 收藏 引用 所屬分類:
學習日志
如果你想初始化一個類中的常量數據成員,只能用一種方法,在類的構造函數后加一個":",然后初始化那些常量數據成員,
以逗號分割。
#include <iostream>
using std::cout;
using std::endl;
class Test
{
? public:
??? Test(int i = 0, int j = 1 );
??? void addon() { count += idx; }
??? void print() const;
? private:
??? int count;
??? const int idx;
?? ?const int idy;
};
Test::Test( int i, int j )
? :idx( j, i ), idy( j, j )
{
?? count = j;
}
void Test::print() const
{
?? cout << "count= " << count
??????? <<", idx = " << idx
?? ???? <<", idy = " << idy
?? ???? << endl;
}
int main()
{
??? Test Test1( 20, 7 );
??? cout << "Before doing addon: ";
??? Test1.print();
??? for ( int k = 0; k < 3; k++ )
??? {
?????? Test1.addon();
?????? cout << "After addon " << k + 1 << ":";
?????? Test1.print();
??? }
??? return 0;
}
result:
Before doing addon: count= 7, idx = 20, idy = 7
After addon 1:count= 27, idx = 20, idy = 7
After addon 2:count= 47, idx = 20, idy = 7
After addon 3:count= 67, idx = 20, idy = 7
Feedback
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2007-02-10 09:54 by
不僅const成員變量是這樣,對于reference成員也如此,必須在初始化列表中進行初始化。一旦進入構造函數的函數體內,const成員和reference成員都不能再變了。
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2007-02-10 09:59 by
樓主的程序寫錯了,構造函數那里應該是:
Test::Test( int i, int j )
:idx( i ), idy( j )
{
count = j;
}
idx和idy都是int,怎么能寫成idx( j, i ), idy( j, j )呢?
我估計,這個例子原來的idx和idy不是int,而是類似pair或者point這樣的對象。
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2007-02-10 10:30 by
不是,我這是故意做的 ,
當然 ,我們都知道應該用 :idx( i ), idy( j ) ,
我故意用
:idx( j, i ), idy( j, j )
你知道,此后 idx 和 idy 的值是什么嗎?
分別是i,和j
我這樣做是為了讓大家知道,初始化的值是向后看齊的
我的每一個例子都是我精心寫的,都有明顯的用意。
嘿嘿
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2007-09-27 17:09 by
樓主有心!
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2007-11-20 17:16 by
--當然 ,我們都知道應該用 :idx( i ), idy( j ) ,
--我故意用
--:idx( j, i ), idy( j, j )
那還故意寫那些錯的程序。直接說明就好了,非得把程序弄得不倫不類的
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2008-01-11 22:02 by
就是,讓我看半天看不懂。
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2008-05-10 12:29 by
暈,逗號表達式么,ls兩位建議重溫下基本C++教程吧
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2008-07-05 19:50 by
一句逗號表達式 搞定。厲害
# re: C++體會 -- 初始化類的常量數據成員 回復 更多評論
2011-09-30 15:14 by
對于“idx( j, i )”,VS2008的提示:“member of non-class type requires single initializer expression”
不知ls各位有何見解?