当初始化类时,编译器会自动调用构造函数,构造函数有以下特征:
1. 构造函数的名称必须跟所在的类的名称相同
2. 构造函数的声明没有返回类型
3. 构造函数可以被重载
如果我们没有自己定义一个构造函数,系统会使用一个默认构造函数,该构造函数的函数体是空的。我们可以自己编写默认构造函数(即不带参数的构造函数),也可以编写带参数的构造函数,利用构造函数对类成员赋初值是很好的选择。
下面用代码来解释构造函数:
#include<iostream>
using namespace std;
class Time
{
public:
Time() //默认构造函数:无参数
{
hour=0;
minute=0;
sec=0;
}
Time(int h,int m,int s) //构造函数重载,带参数的构造函数
{
hour=h;
minute=m;
sec=s;
}
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
};
void Time::set_time() //用作用域分解运算符来联系成员函数和类
{
cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time()
{
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
Time t1; //用构造函数初始化对象
t1.show_time();
Time t2(15,39,59); //用构造函数初始化对象
t2.show_time();
system("pause");
return 0;
}
上面的构造函数的实现是在类里面的,我们也可以在类外完成构造函数的实现
如下:
#include<iostream>
using namespace std;
class Time
{
public:
Time() //默认构造函数:无参数
{
hour=0;
minute=0;
sec=0;
}
Time(int h,int m,int s); //构造函数声明
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
};
Time::Time(int h,int m,int s) //类外构造函数的实现
{
hour=h;
minute=m;
sec=s;
}
void Time::set_time() //用作用域分解运算符来联系成员函数和类
{
cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time()
{
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
Time t1; //用构造函数初始化对象
t1.show_time();
Time t2(15,39,59); //用构造函数初始化对象
t2.show_time();
system("pause");
return 0;
}