C++程序的结构

来源:百度知道 编辑:UC知道 时间:2024/05/22 21:58:03
定义一个Cat类,拥有静态数据成员HowManyCats,记录Cat的个体数目;静态成员函数GetHoeMany(),存取HowManyCats。设计程序测试这个类,体会静态数据成员和静态成员函数的用法

#include<iostream>
using namespace std;
class Cat
{
public:
static void GetHoeMany()
{
cout<<"HowManyCats="<<HowManyCats<<endl;;
HowManyCats+=5;
cout<<"HowManyCats+5="<<HowManyCats<<endl;
}
private:
static int HowManyCats;
};
int Cat::HowManyCats=1;//静态成员变量初始化
int main()
{
Cat::GetHoeMany();//静态成员函数的调用
return 0;
}
说明:
静态成员函数和静态成员变量属于类本身,在类加载的时候,即为它们分配了空间,所以可以通过类名::函数名或类名:变量名来访问。而非静态成员函数和非静态成员属于对象的方法和数据,也就是应该首先产生类的对象,然后通过类的对象去引用。

在静态成员函数中是不能调用非静态成员的,包括非静态成员函数和非静态成员变量。那么在非静态成员函数中是否可以调用静态成员函数呢?答案是肯定的,因为静态成员函数属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员函数的。其实,我们也可以以一个内存模型这个角度来考虑,也就是说,无论采取什么样的操作,程序代码都是在内存中运行的,只有在内存中占有了一席之地,我们才能访问它。如果一个成员函数或成员变量还没有在内存中产生,结果是无法访问它的。所有静态成员函数只能访问静态成员变量。

还有一点必须要注意:对于静态成员变量,必须对它进行初始化,并且应在类之外进行初始化。以这种形式:

变量类型 类名::变量=初始值;