一.静态成员
1.静态成员变量
(1)定义:
类的定义中以静态声明的变量
(2)写法:
static +变量声明
(3)注意:
静态成员变量不在对象中,在静态区,所以不走初始化列表,只能在外部定义。
1.不能给缺省值--->给了缺省值就会进初始化列表,找不到变量,出错
2.不能在初始化列表中写
3.外部定义时不能加static--->规定(类域限定符不包含static就会让其一般处理,即定义一个外部的新的变量)
4.调用:静态成员变量是属于这个类的,也属于每个对象,可以通过域名调,也可以通过对象调(要是public访问限定符)(突破类域)
5.类大小不包含静态成员变量(在静态区)
(4)用法:
1.统计已经创建了多少对象/现存多少对象
2.与创建对象/调用成员函数有关的计数
2.静态成员函数
1.定义:属于整个类的不能访问特定非静态成员的函数
2.写法:static +函数声明
3.调用:(同静态成员变量)
(属于整个类和对象)
1.通过类指定调用
2.通过特定对象调用
4.使用:
没有this指针,访问不了特定非静态成员变量,只能访问静态成员
5.实际使用
1.如果类中有私有静态成员变量,可以只使用静态成员函数,让其只能访问静态成员,可以保证访问安全性,通过类直接调用,更快捷。
二.友元
1.引子:
在运算符重载为全局,不能直接访问类里的私有成员,除非:getter或友元。
2.定义:友元是一种声明,将类/函数声明为类的友元,可以让其访问类中的所有成员
3.格式:friend 加函数/类的声明
4.使用:
1.运算符全局重载(较麻烦)
2.外部类为内部类的友元
3.函数为类的友元
4.类为类的友元
5.注意:
1.友元声明可以写在类中的任意位置,不被类中访问限定符限制
2.友元关系为单向的,不可继承,传递
3.友元可以访问类保护的私有成员但不是类的成员函数->没有this指针的概念
4.不能被const修饰->没this指针概念
5.不能多用,破坏了封装
6.成员函数声明为另一个类的友元
(1)成员函数必须写在调用类的定义的后面、(2)包含成员函数的类的定义要写在调用类之前
注意:成员函数声明为另一个类的友元,仍然不能访问类中的其他类的对象成员--->类中访问成员变量权限是通过类的访问权限,而不是成员函数的访问权限。
三.嵌套类
一.定义
1.类的内部有另一个类的定义,内部类为外部类的友元。
二.格式
外部类的内部定义另一个类。
三.本质
1.两个类实质是分离的,不存在成员关系,使用相当于外部类的this指针指向内部类
四.注意
1.使用:(1)外部类不能直接访问内部类。
(2)内部类天生为外部类的友元