一.构造函数
【1】构造函数不需要在定义时声明类型
。
【2】构造函数不需要用户进行调用
。
【3】可以在类内,也可以在类外构造函数;在类外构造函数时,需要在类内进行声明。
【4】构造函数的名字必须与类名相同
。
【5】构造函数通常用于对类内的数据进行初始化
。
二.构造函数的分类
无参
的构造函数有参
的构造函数参数初始化表
的构造函数【重点】
三.构造函数的写法
- 无参的构造函数
eg1.从键盘输入时分秒,并输出时间。
思路:
- 写一个
Time
类,公共数据由hour
,minute
,sec
,set_time
函数和show_time
函数组成,私有数据由,hour
,minute
,sec
组成。 - 写出两个函数
set_time
和show_time
函数还有主函数。 - 在主函数建立
对象
进行调用。
#include<iostream> using namespace std; class Time { public: Time() { hour=0; minute=0; sec=0; } 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.set_time(); t1.show_time(); Time t2; t2.set_time(); t2.show_time(); return 0; }
以上代码是在类内构造函数,我们还可以在类外构造函数
,但这也需要你在类内进行声明函数
类外的函数写法:
Time::Time() { hour=0; minute=0; sec=0; }
同时在类内的pubilc
里加入:
Time();//函数声明
2.有参的构造函数
我们仍然用上面的例题作为分析:
对于有参数的构造函数我们需要做如下改动:
- 声明构造函数的时候加入参数
Time(int,int,int);
- 在类外定义带参数的构造函数
Time::Time(int h,int m,int s) { hour=h; minute=m; sec=s; }
#include<iostream> using namespace std; class Time { public: Time(int,int,int); void show_time(); private: int hour; int minute; int sec; }; Time::Time(int h,int minute;int sec) { hour=h; minute=m; sec=s; } void Time::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; } int main() { Time t1(12,25,30); t1.show_time(); Time t2(15,30,21); t2.show_time(); return 0; }
- 在建立对象之后进行函数调用的时候,可以
直接赋值参数
。
Time t1(12,25,30); t1.set_time(); t1.show_time();
3.参数初始化表构造函数
我们依然用如上的例子进行解释。
首先在原有基础上的有参构造函数声明上
Time(int,int,int);
将其修改为:
Time(int h,int m,int s):hour(h),minute(m),sec(s){};
当然主函数的对应调用函数依然不变。
#include<iostream> using namespace std; class Time { public: 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>>minute>>sec; } void Time::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; } int main() { Time t1(12,25,30); t1.set_time(); t1.show_time(); return 0; }
4.默认参数的构造函数
#include<iostream> using namespace std; class Time { public: Time(int h=12,int m=25,int s=30); void set_time(); void show_time(); private: int hour; int minute; int sec; }; Time::Time() { hour=h; minute=m; sec=s; } void Time::set_time() { cin>>hour>>minute>>sec; } void Time::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; } int main() { Time t1; t1.set_time(); t1.show_time(); return 0; }