1. 类成员为const类型
2 . 类成员为引用类型
1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面。
2.引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
#include<iostream>
using namespace std;
struct Demo{
const int m_a;
int &m_b;
Demo(int a,int& b):m_a(a),m_b(b){}
~Demo(){}
};
int main(){
int m=5;
int n=6;
Demo a(m,n);
cout << a.m_a << endl;
cout << a.m_b << endl;
}
3.没有默认构造函数的类类型
因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
#include<iostream>
using namespace std;
class Base{
public:
Base(int a):val(a){
}
void print_val(){
cout << "val=" << val << endl;
}
private:
int val;
};
class A{
public:
A(int v):p(v),b(v){}
void print_val(){
cout << "p= " << p << endl;
}
private:
int p;
Base b;
};
int main(){
int m=5;
A b(m);
b.print_val();
}
4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
class Base
{
public:
Base(int a) : val(a) {}
private:
int val;
};
class A : public Base
{
public:
A(int v) : p(v), Base(v) {}
void print_val() { cout << "class A:" << p << endl;}
private:
int p;
};
int main()
{
int m = 45;
A b(m);
b.print_val();
}