通关旅

softgamer的痕迹
posts - 16, comments - 13, trackbacks - 0, articles - 0

C++体会 -- 初始化类的常量数据成员

Posted on 2007-02-09 22:21 softgamer 阅读(4260) 评论(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 alai04
不仅const成员变量是这样,对于reference成员也如此,必须在初始化列表中进行初始化。一旦进入构造函数的函数体内,const成员和reference成员都不能再变了。

# re: C++体会 -- 初始化类的常量数据成员  回复  更多评论   

2007-02-10 09:59 by alai04
楼主的程序写错了,构造函数那里应该是:
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 softgamer
不是,我这是故意做的 ,
当然 ,我们都知道应该用 :idx( i ), idy( j ) ,
我故意用
:idx( j, i ), idy( j, j )
你知道,此后 idx 和 idy 的值是什么吗?
分别是i,和j
我这样做是为了让大家知道,初始化的值是向后看齐的
我的每一个例子都是我精心写的,都有明显的用意。
嘿嘿

# re: C++体会 -- 初始化类的常量数据成员  回复  更多评论   

2007-09-27 17:09 by GG
楼主有心!

# re: C++体会 -- 初始化类的常量数据成员  回复  更多评论   

2007-11-20 17:16 by banna
--当然 ,我们都知道应该用 :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 vik
晕,逗号表达式么,ls两位建议重温下基本C++教程吧

# re: C++体会 -- 初始化类的常量数据成员  回复  更多评论   

2008-07-05 19:50 by guo
一句逗号表达式 搞定。厉害

# re: C++体会 -- 初始化类的常量数据成员  回复  更多评论   

2011-09-30 15:14 by dehiker
对于“idx( j, i )”,VS2008的提示:“member of non-class type requires single initializer expression”

不知ls各位有何见解?

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理