首页 > 其他 > 详细

08. 常量成员函数,初始化列表,静态成员

时间:2020-05-13 21:45:08      阅读:49      评论:0      收藏:0      [点我收藏+]

1.常量成员函数

1.1把this指针的类型变为const type *const this

 

1.2常量成员函数内部不能修改其成员,但这只是语法层面的限制

void foo() const {
	//this->p = nullptr;//编译报错
	HasPtr *ptr = (HasPtr*)this;//强制转换,突破语法限制
	ptr->p = nullptr;
}

  

2.构造函数初始值列表

class HasPtr {
public:
	HasPtr(int *p, int cnt) :ptr(p), count(cnt) {}
private:
	const int *ptr;
	const int count;
};

  

2.1成员的初始化顺序

成员的初始化顺序和它们在类中定义的顺序一致,第一个成员先被初始化,然后第二个,以此类推。构造函数初始值列表中初始值的前后位置关系不会影响初始化顺序。

 

2.2构造和析构的顺序

构造函数:先构造成员,再执行构造函数体,这样就能在构造函数体内操作成员。

析构函数:先执行析构函数体,再析构成员,这样就能在析构函数体内操作成员。

 

 

3.静态成员

3.1静态数据成员的声明和实现要分开

头文件中:

class HasPtr {
public:
	
	HasPtr(int *p=nullptr) :ptr(p) {}
private:
	const int *ptr;
	static int count;//声明了一个静态成员,类外还要定义一下,否则error LNK2001: 无法解析的外部符号 "public: static int HasPtr::count" (?count@HasPtr@@2HA)
};

  

cpp文件中:

int HasPtr::count = 1;//不需要static

  

3.2静态数据成员保存在全局数据区

3.3静态成员函数通过类名调用,没有this指针:

cout << HasPtr::GetCount();

  

08. 常量成员函数,初始化列表,静态成员

原文:https://www.cnblogs.com/Nutshelln/p/12884864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!