网站建设发展方向及前景展望,中国icp备案的有多少企业网站,wordpress 隐私,自己动手建设公司门户网站我们可以使用static关键字把类成员定义为静态的。当我们声明类的成员为静态时#xff0c;这意味着无论创建多少个类的对象#xff0c;静态成员都只有一个副本。 静态成员在类的所有对象都是贡献的。如果不存在其他的初始化语句#xff0c;在创建第一个对象时#xff0c;所有… 我们可以使用static关键字把类成员定义为静态的。当我们声明类的成员为静态时这意味着无论创建多少个类的对象静态成员都只有一个副本。 静态成员在类的所有对象都是贡献的。如果不存在其他的初始化语句在创建第一个对象时所有的静态数据都会被初始化为0。我们不能把静态成员的初始化放置在类的定义中但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。 静态成员变量 /***
static.cpp
***/
#includeiostream
using namespace std;class Box
{public:static int objectCount;Box(double l 2.0,double b 2.0,double h 2.0){cout Construct called. endl;length l;breadth b;height h;objectCount;}double Volume(){return length*breadth*height;}private:double length;double breadth;double height;
};int Box::objectCount 0;int main()
{Box box1(3.3,1.2,1.5);Box box2(8.5,6.0,2.0);cout Total object: Box::objectCount endl; return 0;} 运行结果 exbotubuntu:~/wangqinghe/C/20190807$ g static.cpp -o static exbotubuntu:~/wangqinghe/C/20190807$ ./static Construct called. Construct called. Total object: 2 静态成员函数 如果把函数成员声明为静态的就可以把函数和类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也可以被调用静态函数只要使用类名加范围解析运算符::就可以访问。 静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。 静态成员函数有一个类范围他们不能访问类的this指针。也可以使用静态成员函数来判断类的某些对象是否被创建。 静态成员函数和普通成员函数的区别 静态成员函数没有this指针只能访问静态成员包括静态成员变量和静态成员函数 普通成员函数有this指针可以访问类中的任意成员而静态成员函数没有this指针。 /***
staticfun.cpp
***/
#includeiostream
using namespace std;class Box
{public:static int objectCount;Box(double l 2.0,double b 2.0,double h 2.0){cout Construct called. endl;length l;breadth b;height h;objectCount;}double Volume(){return length*breadth*height;}static int getCount(){return objectCount;}private:double length;double breadth;double height;
};int Box::objectCount 0;int main()
{cout Init stage count: Box::getCount() endl;Box box1(3.3,1.2,1.5);Box box2(8.5,6.0,2.0);cout final stage count: Box::getCount() endl; return 0;
} 运行结果 exbotubuntu:~/wangqinghe/C/20190807$ g staticfun.cpp -o staticfun exbotubuntu:~/wangqinghe/C/20190807$ ./staticfun Init stage count: 0 Construct called. Construct called. final stage count: 2 静态成员变量在类中仅仅是声明没有定义所以要在类的外面 定义实际上是给静态成员变量分配内存如果不加定义就会报错初始化是赋一个初始值而定义是分配内存。 利用静态成员变量来了解构造和析构函数的调用情况。 #includeiostream
using namespace std;class Cpoint
{public:static int value;static int num;Cpoint(int x,int y){xp x;yp y;value;cout call construct value endl;}~Cpoint(){num;cout call deconstruct num endl;}private:int xp;int yp;
};int Cpoint::value 0;
int Cpoint::num 0;class CRect
{public:CRect(int x1,int x2):mpt1(x1,x2),mpt2(x1,x2){ cout call construct endl; }~CRect(){cout call deconstruct endl;}private:Cpoint mpt1,mpt2;
};int main()
{CRect p(10,20);cout hello world! endl;return 0;
} 运行结果 exbotubuntu:~/wangqinghe/C/20190807$ g construct.cpp -o construct -g exbotubuntu:~/wangqinghe/C/20190807$ ./construct call construct 1 call construct 2 call construct hello world! call deconstruct call deconstruct 1 call deconstruct 2 类中特殊成员变量的初始化问题 常量变量必须通过构造函数参数列表进行初始化引用变量必须通过构造函数参数列表进行初始化普通静态变量要在类外通过“::”初始化静态整型变量可以直接在定义的时候初始化静态非整型常量不能直接在定义的时候初始化。要在类通过”::”初始化转载于:https://www.cnblogs.com/wanghao-boke/p/11316626.html