静态成员:无论这个类建立了多少个对象,静态成员在内存中只保留一份,静态成员用来解决同一个类中不一样对象之间数据成员和函数的共享问题。函数
一、静态成员函数是用关键词static声明的成员函数,它属于整个类而并不属于类的某个对象。this
类的静态成员(变量和方法)属于类自己,在类加载的时候就会分配内存,能够经过类名直接去访问;非静态成员(变量和方法)属于类的对象,因此只有在类的对象产生(建立类的实例)时才会分配内存,而后经过类的对象(实例)去访问。spa
因为静态函数是独立于类对象而存在的,所以静态成员函数中没有this指针。因此静态成员函数不能够直接访问类中的非静态成员,可是能够直接访问静态成员。指针
若要访问非静态成员时,必须经过参数传递的方式获得相应的对象,再经过对象来访问。对象
class B{
private:
int x;
int y;
static int count;
public:
B():x(0), y(0){
count++;
}
B(int xx, int yy):x(xx), y(yy){
count++;
}
static int getObjCount();
};
int B::count = 0;
int B::getObjCount(){
return count;
}
int main()
{
cout << B::getObjCount() << endl;
B b1;
B b2(10, 20);
cout << b1.getObjCount() << endl;
cout << b2.getObjCount() << endl;
cout << B::getObjCount() << endl; blog
B *p = new B;
cout << p->getObjCount()<< endl;
return 0;
} 内存
静态数据成员的类型能够是所属类的类型,而普通数据成员则不能够。普通数据成员的只能声明为所属类类型的 指针或引用。举例以下:
class base{
public :
static base _object1;//正确,静态数据成员
base _object2;//错误
base *pObject;//正确,指针
base &mObject;//正确,引用
}; get
二、常成员函数 io
返回类型 成员函数名 (参数表) const ;class
在定义时使用const关键字修饰的用于访问类的常对象函数,成为常成员函数。
常成员函数不能更新对象的数据成员,也不能调用该类中的没有用const修饰的成员函数,但能够被其余成员函数调用。
常对象只能调用常成员方法,而不能调用其余的成员函数。
const关键字能够用于对重载函数的区分
class CDate
{
private:
int y;
int m;
int d;
public:
int year()const;
int month() const;
int day(){return d++ ;}
//int day()const {return d;}
int AddYear(int i){return y+1;}
};
int CDate::year()const
{
return y;
}
int CDate::month()const
{
return m;
//return m++; 错误:常成员函数中不能更新类的数据成员
}
int main(){ CDate const date; //int day = date.day(); 错误常对象不能调用很是成员函数 int year = date.year();}