C++语法学习笔记十: Inline、const、mutable、this、static

实例代码:


#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Time {

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

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

	mutable int testVal;

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

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

	Time() {
		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;

int main() {

	//一:在类定义中实现成员函数inline: 类内的成员函数实现其实也叫类内的成员函数定义
	//这种直接在类的定义中实现的成员函数,会被当做inline内联函数来处理
	//如上面的: addHour()函数

	//二: 成员函数末尾的const
	//成员函数的声明和定义后面都要增加一个const
	//作用:告诉系统,这个成员函数 不会修改该对象里任何成员变量的值等等。
	//如上面的: addHour1()函数

	const Time abc;//定义const对象,这种对象有限制
	//abc.addHour(15);  //报错 addHour() 并不是const成员函数,这个addHour只能被非const对象调用
	Time def;
	def.addHour(16); //可以调用

	//const 成员函数 则不管是const对象,还是非const,都可以调用const成员函数。
	//而非const成员函数,不能够被const对象调用,只能被非const对象调用。


	//三:mutable (不稳定,容易改变的意思),const的反义词,mutable的引入也正好是为了突破const的限制
	//用mutable修饰一个成员变量,约一个成员变量一旦被mutable修饰了,就表示,这个成员变量永远处于可以被修改状态,
	//		即便是在const结尾的成员函数中,也可以修改。
	//如上面的:  fixVal()函数
	const Time ghi;
	ghi.fixVal();


	//四: 返回自身对象的引用, this
	//如何理解这个this, 咱们调用成员函数时,编译器负责把这个对象的地址(&myTime)传递给这个成员函数中的一个隐藏的this形参。

	Time myTime;
	myTime.add_hour(3); //实际编译器中函数形式为 add_hour(&myTime, 3);

	//(1) this指针只能在成员函数中使用,全局函数,静态函数都不能使用this指针
	//(2) 在普通成员函数中,this是一个指向非const对象的const指针(类型为Time,那么this就是Time* const this),表示this只能指向当前Time对象
	//(3) 在const成员函数中, this指针是一个指向const对象的const指针(类型为Time,this就是const Time* const this类型的指针)

	myTime.add_hour(3).add_hour(5);

	//五:static成员 
	//有属于整个类的成员变量,这种成员变量就叫static成员变量
	//特点: 不属于某个对象,属于整个类,我们一旦在某个对象中修改了这个成员变量的值,在其他对象中直接能够看到修改的结果
	Time mytime1;
	mytime1.s_val = 100;

	Time mytime2;
	mytime2.s_val = 200;

	cout << mytime1.s_val << endl;  //输出 200
	cout << mytime2.s_val << endl;  //输出 200

	system("pause");
	return 0;
}
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值