目录
static成员
概念:
声明为static得类成员是类的静态成员,用static修饰的成员变量,称之为静态成员变量,用static修饰的成员函数被称为静态成员函数,静态成员变量,静态成员变量要在类外面进行初始化。
特性:
1.静态成员为所有的类的对象所共享,不属于摸一个具体的对象,都会存放在静态区,可以去计算类的sizeof去判断,从结果我们可以知道静态成员不在类里面。
2.静态成员变量必须在类的外面进行定义,定义的时候回不需要去添加static关键字,类中只是去声明
3.如果想去访问类的静态成员可以用类名::静态成员或者对象.静态成员去访问
4.静态成员函数没有隐藏的this指针,多以说不能访问非静态的成员。(因为访问静态的成员要通过this指针去访问)、
5.静态成员从某种角度来说是全局的,只是收到了public和protected或者private访问限定符的限制
判断题目:
1.静态成员可以去调用非静态的成员函数(X)
2.非静态的成员函数可以去调用类的静态成员函数(V)
面试题:
在类里面查看创建出多少个类对象
解决方案:理工函数会构造,我们写一下构造函数,在构造函数里面写上一个变量进行++,这样我们就可以判断这个类里面有多少个成员对象。
友元函数
第一个问题:
如果现在去尝试重载operator<<,然后会发现没有办法去减肥operator<<给重载成成员函数,因为cout的输出流对象和隐函this指针总是回去抢占第一个参数的位置,this指针是默认将第一个参数(也就是左操作符),但是实际使用的cout需要的是第一个形参对象,才可以正常使用,所以要将operator<<重载称为全局函数,但是这样有会导致类的外面没有办法访问成员函数,这个时候就需要友元来解决同理operator也是这样。
加上域限定符值可以访问
理解一下cout的重载:
如果想要访问私有的情况下需要友元,可以在任何位置去声明
友元函数可以直接访问类的私有成员,友元的函数需要定义在类的外部,不属于任何类,但需要在类的内部声明,在声明的前面加上friend就可以了。
注意情况:
1.友元函数不能用const去修饰
2.友元函数可以在类的任何地方去定义,但是不受了类的访问限定符的限制
3.以个函数可以是多个类的友元函数
友元类
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类的非共有成员
1.友元的关系是单向的,不能具有交换性
2.友元的关系不能传递
3.有元的关系不能继承
友元缺点:
友元虽然十分的便利,但是会增加耦合度,而且会破坏封装,这例面会在多多肽中使用