C++类的静态成员笔记
下面是C++类的静态成员笔记。
静态数据成员特征
用关键字static声明
为该类的所有对象共享,静态数据成员具有静态生存期
必须在类外定义和初始化,用(::)来指明所属的类
举例说明-具有静态数据成员的Point类
代码示例:
1 #include<iostream> 2 3 using namespace std; 4 5 class Point //Point类定义 6 { 7 public: //外部接口 8 Point(int x = 0, int y = 0):x(x), y(y) //构造函数 9 { 10 count++; 11 } 12 13 Point(Point &p) //复制构造函数 14 { 15 x = p.x; 16 y = p.y; 17 count++; 18 } 19 20 ~Point() //析构函数,在main函数return返回前调用 21 { 22 count--; 23 } 24 25 int getX() 26 { 27 return x; 28 } 29 30 int getY() 31 { 32 return y; 33 } 34 35 void showCount() 36 { 37 cout << "Object count = " << count << endl; 38 } 39 40 private: //私有数据成员 41 int x,y; 42 static int count; //静态数据成员 43 }; 44 45 int Point::count = 0; //静态数据成员定义和初始化,使用类名限定 46 47 int main(void) 48 { 49 Point a(4,5); 50 cout << "Point A: " << a.getX() << "," << a.getY(); 51 a.showCount(); //输出对象个数 52 53 Point b(a); //复制构造函数调用,定义对象b,其构造函数会使得count++ 54 cout << "Point B:" << b.getX() << "," << b.getY(); 55 b.showCount(); 56 57 58 return 0; 59 }
运行结果:
1 Point A: 4,5Object count = 1
2 Point B:4,5Object count = 2
静态函数成员特征
类外代码可以使用类名和作用域操作符来调用静态成员函数
静态成员函数主要用于处理该类的静态数据成员,可以直接调用静态成员函数
如果访问非静态成员,要通过对象来访问
举例说明-具有静态数据/函数成员的Point类
代码示例:
1 #include<iostream> 2 3 using namespace std; 4 5 class Point //Point类定义 6 { 7 public: //外部接口 8 Point(int x = 0, int y = 0):x(x), y(y) //构造函数 9 { 10 count++; 11 } 12 13 Point(Point &p) //复制构造函数 14 { 15 x = p.x; 16 y = p.y; 17 count++; 18 } 19 20 ~Point() //析构函数,在main函数return返回前调用 21 { 22 count--; 23 } 24 25 int getX() 26 { 27 return x; 28 } 29 30 int getY() 31 { 32 return y; 33 } 34 35 static void showCount() //静态函数成员 36 { 37 cout << "Object count = " << count << endl; 38 } 39 40 private: //私有数据成员 41 int x,y; 42 static int count; //静态数据成员 43 }; 44 45 int Point::count = 0; //静态数据成员定义和初始化,使用类名限定 46 47 int main(void) 48 { 49 Point::showCount(); 50 51 Point a(4,5); 52 cout << "Point A: " << a.getX() << "," << a.getY(); 53 54 Point::showCount(); 55 //a.showCount(); //也可以输出对象个数 56 57 Point b(a); //复制构造函数调用,定义对象b,其构造函数会使得count++ 58 cout << "Point B:" << b.getX() << "," << b.getY(); 59 60 Point::showCount(); 61 //b.showCount();//也可以输出对象个数 62 63 64 return 0; 65 }
运行结果:
1 Object count = 0
2 Point A: 4,5Object count = 1
3 Point B:4,5Object count = 2
赞 (0)