初始化列表意义
构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。
最为重要的是,下列这些特殊的类成员,必须放在初始化列表位置进行初始化:
1.引用成员变量
2.const成员变量
3.自定义类型成员(该类没有默认构造函数)
由上面的特殊类成员必须放在初始化列表可知:这些特殊的类成员肯定是在初始化列表里定义的,事实上,在C++中规定其他成员也是在初始化列表里定义的。
初始化列表的基本表现形式
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的成员列表
第一种
第一种初始化是常见的赋值操作
student(int m,int n):shengao(m),tizhong(n)
{
cout<<"初始化"<<endl;
}
举例
代码举例:对应第一种
#include<iostream>
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;
}
} ;
第二种
第二种直接用初始化列表来处理。
student():shengao(1.75),tizhong(100)
{//student接收传进来的两个数,然后将两个数分别赋值给shengao,tizhong
//之后private中的shengao和tizhong就分别有值了
cout<<"初始化"<<endl;
}
举例
代码举例:对应第二种
#include<iostream>
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;
}
} ;
初始化顺序
成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关,例:
的先后次序无关,例:
语法说明
标题文本样式列表图片链接目录代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图快捷键
代码片复制
class A
{
public:
A(int a)
{
_a = a;
}
private:
int _a;
};
class Date
{
public:
Date(int year = 1999, int month = 10, int day = 10, int a = 10)
:_year(year) //2
, _month(month) //4
, _day(day) //3
, _a(a) //1
{}
private:
A _a;
int _year;
int _day;
int _month;
};
这里的初始化顺序就是 _a _year _day _month