c++知识细节-类内初始化/默认构造函数/=default;
类相关非成员函数
详见代码.
类内初始化
在c++11里,我们可以为类内成员变量提供一个初始值,那么我们在创建对象的时候,这个初始值就用来初始化该成员变量.
(1) 没有初始值的成员变量,系统缺省策略为一个不确定的值;没有初始值的静态static成员变量,系统缺省策略为0.
(2) const成员变量只能在声明时或者初始化列表设置初始值,不能在构造函数内部设置初值.且构造完成后,不能再改变其值.
默认构造函数
(1) 没有参数的构造函数,就称为默认构造函数.
(2) 即使不写任何构造函数,类也将通过一个特殊的构造函数来初始化,也就是无参的默认构造函数.此时编译器会为我们隐式地自动定义一个默认构造函数(无参),称为"合成的默认构造函数".前提:
没有定义任何构造函数,一旦我们自己写了构造函数,不管这个构造函数带几个参数,编译器都不会为我们创建"合成的默认构造参数"了.
=default; =delete;
(1) c++11标准引入.
//.h
Time2() = default; //编译器能够为我们自动生成函数体,只适用于这种特殊函数,带参数的和普通函数都不适用
//.cpp
Time2::Time2() = default;
Time2() = delete; //显式地禁用某个函数
代码
Time.h
#ifndef __MYTIME__
#define __MYTIME__
class Time
{
public:
int Hour; //小时
int Minute; //分钟
//int Second; //秒钟
//类内初始值
int Second = 0;
//const成员变量
const int ctestvalue = 80;
//普通函数声明
void writeTime(Time &mytime);
public:
//构造函数
explicit Time(int tHour, int tMin, int tSec=30);
//默认构造函数
Time(); // 不加参数
}
#endif
Time.cpp
#include <Time.h>
#include <iostream>
//非成员函数,普通函数
void writeTime(Time &mytime)
{
cout << myTime.Hour;
}
Time::Time(int tHour, int tMin, int tSec):ctestvalue(80)
{
Hour = tHour;
Minute = tMin;
Second = tSec;
initMillTime(0);
}
Time::Time():ctestvalue(80)
{
Hour = 12;
Minute = 59;
Second = 59;
initMillTime(0);
}
//main.cpp
#include <Time.h>
*/
void main
{
Time mytime(12,15,17);
writeTime(myTime);
Time myTime2; //此时会调用默认构造函数
}