3.C++:类与对象(下)

一、再谈构造函数

1.1构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。
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初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
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. 类中包含以下成员,必须放在初始化列表位置进行初始化:
引用成员变量
const成员变量
自定义类型成员(该类没有默认构造函数)
class A
{
public:  
     A(int a)
     :_a(a)
     {}
private:
     int _a;
};
class B
{
public:  //可以理解为初始化列表是对象的成员变量定义的地方
     B(int a, int ref)
     :_aobj(a)
     ,_ref(ref)
     ,_n(10)
     {}
private:   //成员变量声明的地方
     A _aobj; // 没有默认构造函数(不用传参就可以调的那个构造函数)
     int& _ref; // 引用
     const int _n; // const 
};

1.3成员变量在类中声明次序就是其在初始化列表中的

你可能感兴趣的:(C++,c++)