静态数据成员
·用关键字static声明
·当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本
·在类的所有对象中共享,具有静态生存期
·若不存在其他的初始化语句,在创建第一个对象时,所有的静态数据成员被初始化为零
立即学习“C++免费学习笔记(深入)”;
·在类外定义和初始化,用范围解析运算符(::)来指明所属的类
举例:
#include using namespace std;class Box {public:static int count; //若该静态数据成员在private部分声明,则只能通过静态成员函数处理Box(double l = 2.0, double b = 2.0, double h = 2.0) {cout << "One constructor was called." << endl;length = l, width = b, height = h;count++;//每创建一个对象时加1}double Volume() {return length * width * height;}~Box() { count--; }private:double length, width, height;};//初始化类Box的静态成员int Box::count = 0;int main(void) {Box Box1(3.3, 1.2, 1.5);Box Box2(8.5, 6.0, 2.0);cout << "Total objects: " << Box::count << endl;//输出对象的总数return 0;}
静态成员函数
把成员函数声明为静态的,就可以把函数与类的任何特定对象独立开来
·在类对象不存在的情况下也能被调用,使用类名加范围解析运算符 :: 即可访问
·静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数
·静态成员函数有一个类范围,不能访问类的 this 指针,可以使用静态成员函数来判断类的某些对象是否已被创建
·用静态成员函数访问非静态成员,需通过对象
举例:
#include using namespace std;class Box {public:static int count;Box(double l = 2.0, double b = 2.0, double h = 2.0) {cout <<"One constructor was called." << endl;length = l, width = b, height = h;count++;}double Volume() {return length * width * height;}static int getCount() {//静态成员函数 return count;}private:double length, width, height;};int Box::count = 0;int main(void) {//在创建对象之前输出对象的总数cout << "Inital 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;}
注:
静态成员函数与普通成员函数的区别:
·静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)
·普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针
使用静态成员了解构造与析构函数的调用情况
#include using namespace std;class A {friend class B;//类B是类A的友元 public:static int value;static int num;A(int x, int y) {xp = x, yp = y;value++;cout << "调用构造:" << value << endl;}void displayA() {cout << xp << "," << yp << endl;}~A() {num++;cout << "调用析构:" << num << endl;}private:int xp, yp;};class B {public:B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) {cout << "调用构造\n";//mpt是类A的对象,有几个mpt,有关类A的操作便执行几次 }void set(int m, int n);void displayB();~B() {cout << "调用析构\n";//析构函数在类结束前调用,类结束的时候释放类申请的空间} private:A mpt1, mpt2;//将A类的对象声明为B类的私有数据成员 };int A::value = 0;int A::num = 0;void B::set(int m, int n) {mpt1.xp = m * 2, mpt1.yp = n / 2;}void B::displayB() {mpt1.displayA();}int main() {B p(10, 20);cout << "Hello world!" << endl;B displayB(); //通过友元,使类B输出类A的私有数据成员return 0;}
相关文章:
C++静态成员与常成员的使用
C++复习要点总结之五静态成员变量及成员函数
以上就是C++类的静态数据成员和静态成员函数的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432851.html
微信扫一扫
支付宝扫一扫