目录
1.静态数据成员
应用背景:如果希望所有对象中的数据成员的值是一样的,那么便可以把它定义为静态数据变量。
这里需要注意,通常情况下,如果只声明类而未定义对象,那么只有在定义对象时才会为数据成员分配内存空间。而静态数据成员不同,它不属于某一个对象,而是所有对象都可以引用它。所以它在内存中只占有一份内存空间,只要声明了类,即使不定义对象,也会为该静态数据成员分配内存空间。
此外,静态数据成员在程序开始时便分配了内存空间,在程序结束时释放内存空间。
下面的程序展示了静态数据成员的使用方法。
#include<iostream>
using namespace std;
class Box
{
public:
Box(int,int);
int volume();
static int height;//以static关键字开头,把height定义为静态数据成员
int width;
int length;
} ;
Box::Box(int w,int len)
{
width=w;
length=len;
}
int Box::height=10;//在类外对静态数据成员进行初始化
int main()
{
cout<<Box::height;//通过类名对静态成员进行引用
Box a(100,45);
cout<<a.height<<" "<<a.width<<" "<<a.length<<endl;
}
注意:不能通过参数初始化对静态成员进行初始化,对于上述程序中的Box类,下面定义的构造函数是错误的。
Box(int h,int w,int len):height(h){}
2.静态成员函数
静态成员函数也可以定义为静态的。
2.1声明
只需在类中声明函数前加上关键字static。如下
static int sum();
2.2调用
在类外调用,需要类名与域运算符。
Box::sum();
也可以使用对象名调用,但不代表该成员函数属于某一对象。
a.sum();
2.3一些特别之处
(1)静态成员函数不属于某一对象,属于这个类,因此静态成员函数没有this指针。
(2)静态成员函数只能访问静态数据成员,不能访问非静态数据成员。