c++学习|14.4 类内初始化、默认构造函数、“=default”和“=delete”

一:类相关非成员函数
普通函数,不是成员函数

void Writetime(Time &mytime){ std::cout << mytime.hour << std::endl }

函数的声明放在类的后面
二:类内初始化
在c++11里,我们可以为类内成员变量提供一个初始值,那么我们在创建对象的时候,这个初始化值就用来初始化该成员变量。
class Time{ public: int hour; int minute; int second = 0; int second = {0}; //类内初始化值 };

【c++学习|14.4 类内初始化、默认构造函数、“=default”和“=delete”】三:const成员变量的初始化在构造函数的列表里面初始化,不可以通过赋值来初始化
class Time{ public: const int Hour; const int Minute; int second; }; Time::Time(int hour, int minute, int second): Hour(hour), Minute(minute), Second(second) { Hour = hour; //const成员变量,不可以这样初始化 Minute = minute; //const成员变量,不可以这样初始化 }

四:默认构造函数:没有参数的构造函数,我们就称为默认构造函数
没有构造函数,这些类对象如何初始化呢?
这叫"默认初始化"。也就是说,这个类通过一个特殊的构造函数来执行默认的初始化过程。那么这个特殊的构造函数就叫做"默认的构造函数",也就是无参数的构造函数。
在类定义中,如果没有构造函数的情况下,编译器就会为我们隐式的自动定义一个"默认构造函数"(无参)称为"合成的默认构造函数"。
这个"合成的默认构造函数"做了些什么?
其实他没有做什么。一旦我们自己写了一个构造函数,不管这个构造函数带几个参数,编译器就都不会为我们生成“合成的默认构造函数”了。
class Time2{ public: explicit Time2(){//不带参数的构造函数 Hour = 12; } public: int Hour; int Minute int Second {0}; }Time2 mytime2; //生成对象时会调用类的无参构造函数。class Time3{ public: int Hour; int Minute int Second {0}; }Time3 mytime3; //会生成合成的默认构造函数class Time3{ public: int Hour; int Minute int Second {0}; Time3(int tmphour){ Hour = tmphour; } }Time3 mytime3; //这样写将是错误的,因为有参数的构造函数,将不会生成"合成的默认构造函数";class OneClass { public: OneClass(int a) { } }; class Time4{ public: int Hour; int Minute int Second {0}; OneClass oc; Time(): oc(100) { } }

<1>类类型成员变量oc的初始化,必须通过“构造函数初始化列表”来进行初始化的操作
<2>const成员变量的初始化,必须通过“构造函数初始化列表”来进行初始化的操作
五:=default,=delete,c++ 11引入的
int func() = default; 非特殊函数,不可以使用 = default;
class Time4{ public: int Hour; int Minute int Second {0}; Time4(int tmphour){}//带参数的构造函数,也不可以使用 =default。 Time4() = default; //编译器能够为这种 =default 的函数自动生成函数体。 }; Time4 mytime4; //能够实现。//=default; 编译器能够为我们自动生成函数体。class Time5{ public: int Hour; int Minute int Second {0}; Time5(int tmphour){}//带参数的构造函数,也不可以使用 =default。 Time5() = delete; //让程序员显式的禁用某个函数。 }Time5 mytime5; //实效,没有不带参数的构造函数,所以定义对象失败。

注意:
“Time2()=delete; ”代码行导致Time2 myTime2报错,在编译器看来,这两行代码就是不能共存。

    推荐阅读