升阳广州做网站公司,上海互联网公司,网站设计苏州,南宁品牌网站建设公司1.再谈构造函数
1.1构造函数的组成
构造函数包括函数体赋值与初始化列表初始化。
1.2函数体赋值
class Date
{
public:Date(int year, int month, int day){_year year;_month month;_day day;}
private:int _year;int _month;int _day;
};虽然上述构造函数调用之后 year;_month month;_day day;}
private:int _year;int _month;int _day;
};虽然上述构造函数调用之后对象中已经有了一个初始值但是不能将其称为对对象中成员变量的初始化 构造函数体中的语句只能将其称为赋初值而不能称作初始化。因为初始化只能初始化一次而构造函数体 内可以多次赋值。
1.3初始化列表 初始化列表以一个冒号开始接着是一个以逗号分隔的数据成员列表每个成员变量后面跟一个放在括号中的初始值或表达式。 class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}private:
//成员的声明int _year;int _month;int _day;
};特征 1.初始化列表是每个成员定义的地方。 2.先走初始化列表初始化再走函数体赋值。 3.不管写不写每个成员都要走初始化列表。及我们会在初始化列表中去初始所有的成员对于自定义类型的成员会去调用它的默认构造函数对于内置类型不做处理所以能用初始化列表就用初始化列表。 4.初始化列表走的顺序只与成员的声明顺序有关。所以建议初始化列表的顺序与声明的顺序保持一致。 5.每个成员变量在初始化列表中只能出现一次初始化只能初始化一次。 6.C11支持给缺省值这个缺省值是给初始化列表用的如果显示给值了就不用这个缺省值。 必须在初始化列表位置进行初始化的三种情况
1.引用成员变量引用也是只有在定义的地方才能初始化
2.const成员变量const成员只有在定义时才能初始化
3.自定义类型成员且该类没有默认构造时 2.初始化列表需要与函数体混合着用
比如下面的情况
有些初始化需要去调用函数需要用到函数体。