C++11新标准,委托构造函数是为了构造函数减少代码的重复,
经过看过的文章简单粗暴地总结,委托构造函数在类内创建和实现。
#include<iostream>
using namespace std;
class Clock{
public:
//定义构造函数
Clock(int newH,int newM,int newS);
//委托构造函数在类内声明
Clock():Clock(5,6,7){};
//委托构造函数的参数小于或等于被委托的构造函数
void settime(int newH=0,int newM=0,int newS=0);
void showtime();
private:
int hour,minute,second;
};
void Clock::settime(int newH,int newM,int newS)
{
hour=newH;
minute=newM;
second=newS;
}
void Clock::showtime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
//构造函数的实现,初始化列表
//直接初始化赋值效率更高,比起在函数体中赋值
Clock::Clock(int newH,int newM,int newS):
hour(newH),minute(newM),second(newS)
{}
int main()
{
Clock myclock(6,0,0);
Clock c2;//如果没有默认构造函数就会报错,因为无法初始化
//4-1没有构造函数也没错是因为在调用时系统自动生成了隐含的默认构造函数
c2.showtime();
system("pause");
return 0;
}
不使用委托构造函数,就必须对每一个构造函数的功能进行定义
#include<iostream>
using namespace std;
class Clock{
public:
//定义构造函数
Clock(int newH,int newM,int newS);
Clock();//默认构造函数
void settime(int newH=0,int newM=0,int newS=0);
void showtime();
private:
int hour,minute,second;
};
void Clock::settime(int newH,int newM,int newS)
{
hour=newH;
minute=newM;
second=newS;
}
void Clock::showtime()
{
cout<<hour<<":"<<minute<<":"<<second;
}
//构造函数的实现,初始化列表
//直接初始化赋值效率更高,比起在函数体中赋值
Clock::Clock(int newH,int newM,int newS):
hour(newH),minute(newM),second(newS)
{}
//默认构造函数的实现
Clock::Clock():hour(4),minute(44),second(23)
{ }
int main()
{
Clock myclock(6,0,0);
Clock c2;//如果没有默认构造函数就会报错,因为无法初始化
//4-1没有构造函数也没错是因为在调用时系统自动生成了隐含的默认构造函数
myclock.showtime();
c2.showtime();
system("pause");
return 0;
}