C++之初始化列表

2018-03-22  本文已影响14人  程序手艺人

问题

类中是否可以定义 const 成员?

#include<stdio.h>

class Test
{
private:
    const int ci = 0;
public:
    int getCI() { return ci; }
};

int main()
{
    Test t;
    printf("t.ci = %d\n",t.getCI());

}

编译结果:

t20.cpp:13:10: error: uninitialized const member in ‘class Test’
     Test t;

这时候引入本文的重点, 初始化列表出场:


类成员的初始化

ClassName::ClassName() :
          m1(v1), m2(v1,v2),m3(v3)
{
   //some other initialize operation 
}

注意事项

修改上述代码如下:

#include<stdio.h>

class Test
{
private:
    const int ci;
public:
    Test():ci(10)
    {
        //ci = 10; 
    }
    int getCI() { return ci; }
};

int main()
{
    Test t;
    printf("t.ci = %d\n",t.getCI());

}


类中的const 成员

#include<stdio.h>

class Value
{
private:
    int mi;
public:
    Value(int i)
    {
        printf("i = %d\n",i) ;
        mi = i;
    }
    int get()
    {
        return mi; 
    }
};


class Test
{
private:
    const int ci;
    Value m3;
    Value m2;
    Value m1;
public:
    Test():m1(1),m2(2),m3(3),ci(100)
    {
        printf("Test::Test()\n");
    }
    int getCi()
    {
        return ci;
    }
    int setCi(int v)
    {
        int *p = const_cast<int *>(&ci);

        *p = v;
    }
};

int main()
{
    Test t;
    printf("t.ci = %d\n",t.getCi());
    t.setCi(10);
    printf("t.ci = %d\n",t.getCi());
    return 0;
}

输出:

i = 3
i = 2
i = 1
Test::Test()
t.ci = 100
t.ci = 10

小结

上一篇 下一篇

猜你喜欢

热点阅读