Posted on 2007-02-09 22:21
softgamer 阅读(4261)
评论(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各位有何见解?