一、构造函数初始化列表的基本形式
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,
每个数据成员后面跟一个放在括号中的初始化式。
第一种:
student(int m,int n):shengao(m),tizhong(n)
{
cout<<“初始化”<<endl;
}
第二种:
student():shengao(1.75),tizhong(100)
{//student接收传进来的两个数,然后将两个数分别赋值给shengao,tizhong
//之后private中的shengao和tizhong就分别有值了
cout<<“初始化”<<endl;
}
代码举例:对应第一种
#include
using namespace std;
class student
{
private:
double shengao;
int tizhong;
public:
student(double m,int n):shengao(m),tizhong(n)
{//student接收传进来的两个数m和n,然后m赋值给shengao,n赋值给tizhong
//之后private中的shengao和tizhong就分别有值了
cout<<“初始化”<<endl;
}
void show()
{
cout<<shengao<<endl<<tizhong;
}
} ;
int main()
{
student lisi(1.75,100);
lisi.show();
return 0;
}
代码举例:对应第二种
#include
using namespace std;
class student
{
private:
double shengao;
int tizhong;
public:
student():shengao(1.75),tizhong(100)
{//将两个数分别赋值给shengao,tizhong
//之后private中的shengao和tizhong就分别有值了
cout<<“初始化”<<endl;
}
void show()
{
cout<<shengao<<endl<<tizhong;
}
} ;
int main()
{
student lisi;
lisi.show();
return 0;
}
二、成员变量的初始化顺序只与成员变量在类中声明的顺序有关,与初始化列表中列出的变量的顺序无关
//代码举例2:
#include
using namespace std;
class text
{
private:
int math;
int English;
public:
text():English(90),math(English+10){}
//因为先声明的math,但是当把English+10的值赋给math的时候还不知道English,
//所以输出的math是个不确定的值(输出的math是个垃圾值)
//math初始化完了之后,初始English,把90赋给English,最后输出90
void print();//在此处声明print函数
} ;
void text::print()//print函数是text类的一个函数
{
cout<<math<<endl<<English;
}
int main()
{
text t;//定义t是text类的一个对象
t.print();
return 0;
}
三、必须要使用列表初始化的时候
引用成员变量
const成员变量
自定义类型成员(且该类没有默认构造函数时)
#include
using std::cout;
using std::endl;
class A
{
public:
A(int a = 77) :_a(a)
{
;
}
private:
int _a;
};
class Date
{
public:
Date(int year, int month, int day,int y)
:_year(year)
, _month(month)
, _day(day)
,_x(6)
,_y(y)
{
;
}
void Print()
{cout << "_year: " << _year << endl;cout << "_month: " << _month << endl;cout << "_day: " << _day << endl;cout << "_x: " << _x << endl;cout << "_y: " << _y << endl;
}
private:
int _year;
int _month;
int _day;
int _second;//内置类型//下面的类型必须在定义的时候初始化===》体现了初始化列表的作用
const int _x;
int& _y;
A _aa;//自定义类型
};
int main()
{
Date d1(2023, 2, 4, 11);
d1.Print();
return 0;
}