一 概述 静态成员函数与静态成员变量是一样的,它们不单属于一个对象,而是属于整个类
二 示例演示及结果 2.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include<iostream> using namespace std; class A { private: static int n; public: void static show() { cout << A::n; n++; } }; int A::n = 0; int main() { for (int i = 0; i < 5; i++) { A::show(); cout << endl; } return 0; }
2.2 输出结果
2.3 说明
从上面的例子中,我们看出公有的静态成员函数show()在未创建对象时也可以使用,它的调用与静态成员变量一样
注意:静态成员函数由于是属于整个类的,所以它不能访问某个对象的成员变量,因为它没有指向该对象的this指针。不过它可以访问该类的静态成员变量
三 示例演示及结果二 3.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include<iostream> using namespace std; class A { private: static int n; int m; public: A(){m=0;} void static show(){cout << A::n;n++;} }; class B:public A{}; int A::n = 0; int main() { A a,b,c; a.show(); b.show(); c.show(); A::show(); B::show(); return 0; }
3.2 输出结果
3.3 说明
我们也可以通过对象来访问静态成员函数
要使用类成员名限定来访问静态成员,不要使用对象名,因为静态成员是类的成员而不是对象的成员
静态成员可以被继承,基类和派生类对象都可以共享该静态成员
四 示例演示及结果三 4.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include<iostream> using namespace std; class A { private: static int n; int m; public: A(){m=0;} void static show(){cout << A::n;n++;} void get(){cout<<n;} }; class B:public A{}; int A::n = 0; int main() { A::show(); A a; a.get(); B::show(); return 0; }
4.2 输出结果
4.3 说明
类中任何成员函数都可以访问静态成员,但是静态成员函数不能直接访问非静态成员,只能通过对象名访问对象的非静态成员。这是因为静态成员函数是属于整个类的,没有特指向某个对象的this指针
特别注意:静态成员函数不能被说明为虚函数