1.构造函数
在类中有一种特殊的成员函数,它的名字与类名相同,在创建类对象时,这个特殊的成员函数会被系统自动调用,这个函数就叫拷贝构造函数。可以简单理解为构造函数的意义就是初始化类内对象的成员变量。
注意构造函数无返回值,一个类中允许多个构造函数的存在。下面提供两种构造函数的定义方法:
Time(int hour, int minute, int second):Hour(hour),Minute(minute),Second(second)
{
cout << "构造函数的调用" << endl;
}
Time(int hour, int minute, int second)
{
Hour = hour;
Minute = minute;
Second = second;
}
Time time1(10,10,10);//构造函数的调用
虽然一个类中允许多个构造函数的存在但是要让编译器区分不同构造函数的区别,否则会报错。上面的代码就不允许同时存在。
Time time2 = time1;//这种不调用构造函数
上面代码其实调用的是拷贝构造函数。下面马上来讲解拷贝构造函数。
2.拷贝构造函数
Time(const Time& mytime)
{
Hour = mytime.Hour;
Minute = mytime.Minute;
Second = mytime.Second;
cout << "拷贝构造函数的调用" << endl;
}
Time(const Time& mytime):Hour(mytime.Hour),Minute(mytime.Minute),Second(mytime.Second)
{
cout << "拷贝构造函数的调用" << endl;
}
上面是拷贝构造函数的两种写法,系统的默认拷贝构造函数大概就是这么的。
拷贝构造函数的第一个参数是代了const的,一般来讲拷贝构造函数第一个参数都是带const修饰的,这样可以少创建一个临时变量,提高效率。
如果定义对象时搞不清楚是调用拷贝构造函数还是构造函数可以在两个函数里打印一些语句来帮组你确认是否调用该函数。
把对象当成参数传入函数时调用拷贝构造函数:
void test(Time m)
{
return ;
}//调用拷贝构造函数
void test(Time& m)
{
return ;
}//不会调用拷贝构造函数
从函数返回一个类对象时调用拷贝构造函数。(可能被编译器优化看不到)。