静态成员变量和静态成员函数
●静态成员变量:
注意:
编译阶段分配内存
所有对象共享同一个数据
有权限控制,private通过类名类外初始化
访问:
可以通过对象访问,也可以通过类名访问
使用:
类内声明,类外初始化
●静态成员函数:
注意:
可以访问静态成员变量,不可以访问普通成员变量(静态成员变量是共享的,静态成员函数不能区分是哪个对象的普通对象)
没有this指针,可以被pthread_create调用(见线程池文章)
有权限控制
访问:
可以通过对象访问,也可以通过类名访问
单例模式
目的:让类中只有一个实例,实例不需要自己释放,如线程池类,日志类
使用:
将构造函数和拷贝构造函数私有化,不能类外创建对象
对外提供getinstance()方法来访问唯一实例
(懒汉饿汉见日志那篇文章)
C++对象模型初探
成员变量和成员函数分开存储
成员函数不属于对象,函数是共享的,通过this指针区分调用函数的对象
空类的大小为1,,每个实例的对象有独一无二的地址,char维护这个地址
只有非静态成员变量才属于对象
this指针的使用
指针永远指向当前对象
解决命名冲突:this->a = a;
非静态成员函数才有this指针
函数体作为左值:1.函数声明中返回引用 (不然就会返回副本) 2.函数体return *this;
空指针(A *a = NULL;)
如果成员函数没用到this,那么空指针可以访问
如果成员函数用到this指针,要注意加if判断,this为NULL就return
类内常函数 常对象
●常函数 : void func() const {}
不能修改this指针指向的值
●常对象:const A a;
不允许修改属性
不可以调用普通的成员函数,只能调用常函数
●mutable:使得在常函数中也能修改
友元
●全局函数做友元函数
使用:类中声明全局函数,并在最前面加friend
作用:访问类内私有成员
●整个类做友元类
使用:friend class 类名
注意:单向,不可传递
●成员函数做友元函数
使用:friend void A::func();