C++语法学习笔记十一: 类内初始化、默认构造函数、=default

实例代码:


#include 
#include 
#include 

using namespace std;



class Time {

private:
	void initMillTime(int mls) {
		Millisecond = mls;
	}

	int Millisecond; //毫秒
public:
	int Hour; //小时
	int Minute;//分钟
	//int Second;//秒钟

	//int Second = 0;//秒钟  类内初始化
	int Second = {0};//秒钟  类内初始化
	mutable int testVal;

	//const int ctestvalue = 80; //定义一个常量 并在这里初始化
	const int ctestvalue;//定义一个常量 在内构造函数 初始化列表中初始化


	//构造函数
	Time(int temphour, int tmpmin, int tmpsec) :ctestvalue(80){
		Hour = temphour;
		Minute = tmpmin;
		Second = tmpsec;
		initMillTime(0);

		cout << "调用了构造函数Time(int temphour, int tmpmin, int tmpsec)" << endl;
	}

	Time() :ctestvalue(80) {
		Hour = 12;
		Minute = 59;
		Second = 59;
		initMillTime(50);

		cout << "调用了构造函数Time()" << endl;
	}

	void addHour(int tmphour) {
		Hour += tmphour;
	}

	void addHour1(int tmphour) const{
		//Hour += tmphour; //报错  这地方不能修改成员变量的值
	}

	void fixVal() const {
		testVal = 10;
	}

	//把对象自己给返回回去了
	Time& add_hour(int tmphour) {
		Hour += tmphour;
		return *this;	//把对象自己给返回去了
	}


	static int s_val;
};

int Time::s_val = 10;


//类定义(类声明)
class Time2{  //定义一个时间类

public:
	//explicit Time2(); //不带参数的构造函数:默认构造函数

	Time2(int){};

	Time2() = default; //编译器能够为这种 =default;的函数自动生成函数体

	//Time2() = delete; //让编译器停止生成默认构造函数,让程序员显示创建构造函数

public:
	int Hour;
	int Minute;
	int Second{ 0 };


};

//Time2::Time2(){
//	Hour = 12;
//	
//}
//

int main() {

	//一:类相关非成员函数
	//函数声明放到 类声明的头文件中,函数定义放到类定义的cpp文件中



	//二:类内初始化
	//在 C++ 11里, 我们可以为类成员变量提供一个初始值,那么我们在创建对象的时候,这个初始化值就用来初始化该成员变量。
	//如 上面类中的 Second 成员变量


	//三:const成员变量的初始化
	//在定义const变量时 给定一个初值,或者在构造函数初始化列表中进行初始化,不可以通过赋值进行初始化


	
	//四:默认构造函数: 没有参数的构造函数,我们就称为默认构造函数

	Time2 myTime2;//生成对象时会调用类的构造函数,如果没有写,编译器会自动创建一个默认的构造函数(无参)
					//称为“合成的默认构造函数”,这个“合成的默认构造函数”做了很有限的一些初始化
	//一旦我们自己写了一个构造函数,编译器就不会再为我们创建“合成的默认构造函数”


	//五:=default, =delete
	//C++ 11中引入的
	//=default : 编译器能够为我们自动生成函数体,仅限于一些特殊的函数,并不是所有函数都可以
	//= delete : 让编译器停止生成默认构造函数,仅限于一些特殊的函数, 逼着程序员显示创建构造函数


	system("pause");
	return 0;
}

你可能感兴趣的:(#,3.2,C++)