1. 常成员
Class A
{
……………..
int k;
const intM; //常数据成员
intg()const; //常成员函数
A();
};
const A t; //常对象
(1) 常数据成员
必须通过初始化列表对该数据成员进行初始化,例如A::A():M(100) {}
(2) 常对象
该对象的全部数据成员为只读
例如:t..k原本为1,执行t.k=3则会出错
(3) 常成员函数
该成员函数的this指针被约束为指向常量的常指针
例如:int A::g()const
{
return k++; //报错,不能修改数据成员
}
常成员函数的this指针类似于: const A * const this;
2. 静态成员
Class B
{
………………..
static intnum; //静态成员函数
static voidfun(); //静态成员函数
……………..
};
B bb;
“静态”是值他的作用域局部于类,一个类可以创建多个对象,因此静态成员提供了一种同类对象的共享机制。
(1) 静态数据成员
勒种声明,类外定义
例如:int B::num=0;
(2) 静态成员函数
没有this指针,因此只能访问类的静态数据成员
普通成员函数由对象激活,而静态成员函数由类或者对象激活
例如: B::fun();
或者 bb.fun();
3. 友元
友元可以访问类的所有成员,包括私有成员,可以是一个普通函数、成员函数或者另一个类
(1) 友元函数
class C
{
private:
int I;
void fun(int);
friendvoid fun2(C *,int);
……………………………..
};
void fun2(C * ptr,int x)
{ ptr->i=x; } //友元函数通过参数访问类的私有成员
void C::fun(int x)
{ i=x; } //成员函数通过this指针访问类的私有成员
(2) 友元类
Class D
{
friend class E;
private:
int x;
};
Class E
{
public:
void set(int i)
{
Dobj.x=i; //若E不是D的友元类,Dobj将不能在这里访问私有成员x
}
private:
D Dobj;
}