member initialization list

Member Initialization

Foo(int num) : bar(num) {};

understand like this

int bar = num;

equivalent

Foo(int num) : bar() {bar = num;}

the object will be constructed and initialized in one operation. like copy constructor.

Member Assignment

Foo(int num)
{
		bar = num;
}

understand like this

int bar;
bar = num;

equivalent

Foo(int num): bar(num){}

the object will be constructed and initialized in two operation. first call default constructors and then reassigned. So some situations must use member initialization, like non static const member or reference member ,which can not be reassigned. like member object do not have default constructor.it will call default construtor but can not find the default constructor.

Situations

1.Initialization of non static const members

class Test {
    const int t;
public:
    Test(int t):t(t) {}  //Initializer list must be used
};

2.Initialization of reference members

class Test {
    int &t;
public:
    Test(int &t):t(t) {}  //Initializer list must be used
};

3.Initialization of member object which do not have default constructor

class A {
    int i;
public:
    A(int );
};
 
A::A(int arg) {
    i = arg;
    cout << "A's Constructor called: Value of i: " << i << endl;
}
 
// Class B contains object of A
class B {
    A a;
public:
    B(int );
};
 
B::B(int x):a(x) {  //Initializer list must be used
    cout << "B's Constructor called";
}
/* OUTPUT:
    A's Constructor called: Value of i: 10
    B's Constructor called
*/

a as a member object, if use member assignment, it will call the default constructor, but there is not a default constructor. if you write the default constructor, it will ok,(the compiler will create default constructor if you do not write one constructor).

4.Initialization of base class member

class A {
    int i;
public:
    A(int );
};
 
A::A(int arg) {
    i = arg;
    cout << "A's Constructor called: Value of i: " << i << endl;
}
 
// Class B is derived from A
class B: A {
public:
    B(int );
};
 
B::B(int x):A(x) { //Initializer list must be used
    cout << "B's Constructor called";
}
 
int main() {
    B obj(10);
    return 0;
}

URL

What is this weird colon-member (" : ") syntax in the constructor?

When do we use Initializer List in C++? - GeeksforGeeks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值