目录
什么是构造函数:
构造函数是一个特殊的成员函数,构造函数没有返回值而且函数名与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次。
为什么使用构造函数
我们在创建一个对象后,通常需要给对象设置信息,我们可以用调用方法来给对象设置信息,但是如果每次创建对象都调用该方法设置信 息,未免有点麻烦,构造函数可以在对象创建时,就将信息设置进去
class Data
{
public:
//构成函数与类名相同,没有返回值
Data(int year,int month,int day)
{
_year = year;
_month = month;
_day = day;
}
void InitData(int year,int month,int day)//初始化
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout<<_year<<"/"<<_month<<"/"<<_day<<endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data a(2020,4,25);
return 0;
}
构造函数可以重载
class Data
{
public:
Data()//无参的构造函数
{
_year = 2020;
_month = 5;
_day = 1;
}
Data(int year,int month,int day)//用户显式定义了一个带有三个参数的构造函数
{
_year = year;
_month = month;
_day = day;
}
void InitData(int year,int month,int day)//初始化
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout<<_year<<"/"<<_month<<"/"<<_day<<endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data a;//调用无参的构造函数
// 注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明
Data b(2020,4,25);//调用用户显式定义了一个带有三个参数的构造函数
system("pause");
return 0;
}
构造函数的特性:
1. 函数名与类名相同。
2. 无返回值。
3. 对象实例化时编译器自动调用对应的构造函数。
4. 构造函数可以重载。(默认函数不可以重载,默认构造函数只能存在一个)
默认构造函数
我们一般会认为默认构造函数就是编译器自动生成的那个构造函数,其实这种理解不全面。
准确的说,默认构造函数就是在调用时不需要显示地传入实参的构造函数。根据这个原则,下面3种构造函数都是默认构造函数:
class XML{
public:
XML()
{
}
//
...
};
class XML{
public:
XML(int a = 10,int b =10)//全缺省参数 可以不需要传入实参
{
}
//
...
};
上面的两种都是默认构造函数,还有一种特殊的默认构造函数,在某种情况下若类中没有用户定义的显示构造函数,C++编译器会自动生成一个无参的构造函数,一旦用户定义了就不再生成
class XML{
public:
//
...
}
默认构造函数:
1.无参的构造函数
2.全缺省构造函数
3. 如果用户没有显式定义任何构造函数,编译器会自动生成一个无参的构造函数
默认的构造函数:只能存在一个所以默认构造函数不能重载
个人理解:构造函数与默认构造函数 : 默认构造函数是构造函数,构造函数不一定是默认构造函数
默认构造函数在对象的创建时不需要传参 A a; 类名 + 对象
构造函数在对象的创建时需要根据构造函数的参数列表传参 A a(...); 类型 + 对象(实参)