3-4 类内初始化、默认构造函数、=default
类内相关非成员函数
可以直接放在类得声明与定义文件中。
class Time{
public:
int Hour{ 1 };
};
void func(Time &mytime);
类内初始化
在C++11,我么可以为类内成员变量提供一个初始值,则我们在创建对象的时候,这个初始值就用来初始化该成员变量。
//Time.h
class Time{
public:
int Hour{ 1 };
int Minute{ 4 };
const int C_Second{ 0 };
Time(const int& tmp_hour, const int& tmp_minute, const int& tmp_second);
Time(const int& tmp_hour, const int& tmp_minute);
};
//Time.cpp
Time::Time(const int& tmp_hour, const int& tmp_minute, const int& tmp_second)
:Hour(tmp_hour), Minute(tmp_minute), C_Second(tmp_second){
}
Time::Time(const int& tmp_hour, const int& tmp_minute)
:Hour(tmp_hour){ //调用这个构造函数时,因为没有初始化C_Second所以C_Second会被赋予类内初始化时的值
}
//file.cpp
#include "Time.h"
int main(){
Time mytime { 2 };
cout << mytime.Hour << endl; //2
cout << mytime.Minute << endl; //4
cout << mytime.Second << endl; //0
}
const成员变量的初始化,在构造函数的初始化列表里进行,不可以通过赋值来初始化。
默认构造函数
//Time.h
class Time{
public:
int Hour{ 0 };
int Minute{ 0 };
const int C_Second{ 0 };
};
//file.cpp
#include "Time.h"
int main(){
Time mytime;
cout << mytime.Hour << endl; //Hour = 0
}
//Time.h
class Time{
public:
int Hour;
explicit Time();
};
//Time.cpp
Time::Time()
{
Hour = 2;
}
//file.cpp
#include "Time.h"
int main(){
Time mytime;
cout << mytime.Hour << endl;
}
默认构造函数,即没有参数的构造函数就是默认构造函数。
没有构造函数,这些类对象时如何调用的?这叫做默认初始化,也就是说类通过一个特殊的构造函数来执行默认的初始化过程。
这个特殊的构造函数就叫做“默认的构造函数”。也就是无参的构造函数。
在类定义中,如果没有构造函数的情况下,编译器会为我们隐式的自动定义一个默认的构造函数。称为“合成的默认构造函数”。
一旦我们自己写了一个构造函数,不管这个构造函数带几个参数,编译器就不会为我们创建“合成的默认构造函数”。
=default,=delete
=default 编译器能自动为我们生成函数体,一般只能以用于默认的特殊成员函数。
带参数的构造困数,不可以使用= default:
= delete:让程序员显示的禁用默认构造函数。
//Time.h
class Time{
public:
int Hour{ 0 };
int Minute{ 0 };
const int C_Second{ 0 };
Time() = default; //编译器能够为 =default;的函数自动生成函数体: {}
};
//file.cpp
#include "Time.h"
int main(){
Time mytime;
cout << mytime.Hour << endl; //Hour = 0
}
https://blog.csdn.net/china_jeffery/article/details/79288103