我们在定义一个对象的同时想给它的数据成员赋值,这时候就要用到构造函数,通过构造函数来实现对象的初始化。
构造函数是类的成员函数的一种,它有一些自己的特点区别于一般函数。
1:构造函数的名称必须和类名一致。
2:构造函数没有返回值,不能用void来修饰。
3:构造函数不能直接调用,它由编译器在创建对象时自动调用。
4:用户可以自己定义构造函数,如果没有,系统会提供一个默认的空构造函数。
5:用户可以定义多个构造函数(参数类型或个数不同),也叫构造函数的重载。
下面是如何使用构造函数:
#include <iostream.h> //输入输出流头文件
class Date //Date类
{
public:
//构造函数
//当没有对数据对象赋值时,默认年月日都为1
Date()
{
year = 1;
month = 1;
day = 1;
}
Date(int y,int m,int d) //通过用户来赋值
{
year = y;
month = m;
day = d;
}
void print() const;
private:
//数据成员
int year;
int month;
int day;
};
void Date::print() const
{
cout<<year<<"-"<<month<<"-"<<day<<endl; //格式化输出year-month-day对应的年月日
}
int main(){
Date national_day(1949,10,1); <span style="white-space:pre"> </span>//对象初始化时通过构造函数为变量赋值
Date defaultday=Date(); //对象初始化时使用构造函数的默认值
national_day.print(); //结果为:1994-10-1
defaultday.print(); //结果为:1-1-1
return 0;
}
下面的例子是添加了有默认形参值得构造函数:
#include <iostream.h> //输入输出流头文件
class Date //Date类
{
public:
//构造函数
Date(int y=1,int m=1,int d=1) //当没有对数据对象赋值时,默认年月日都为1
{
year = y;
month = m;
day = d;
}
void print() const;
private:
//数据成员
int year;
int month;
int day;
};
void Date::print() const
{
cout<<year<<"-"<<month<<"-"<<day<<endl; //格式化输出year-month-day对应的年月日
}
int main(){
Date national_day(1949,10,1); <span style="white-space:pre"> </span>//对象初始化时通过构造函数为变量赋值
Date defaultday=Date(); //对象初始化时使用构造函数的默认形参值
national_day.print(); //结果为:1994-10-1
defaultday.print(); //结果为:1-1-1
return 0;
}
两个程序相同的运行结果: