C++静态成员函数不能调用非静态成员变量(详解)

时间:2021-05-20

其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们

都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而非静态成员变量和非静态成员函数是针对类的对象而言。

然而从本质上来说类的静态成员函数的函数形参中没有默认的this指针,导致不能调用具体实例对象的成员。

下面我们来测试一下:

先在静态成员函数中调用静态成员变量:

#include <iostream>using namespace std;class vpoet{public: static int a; int b;public: vpoet(int data) { b=data; } static void statictestfun1() { cout<<"static a="<<a<<endl; }};int vpoet::a=10;int main(){ vpoet *V; V=new vpoet(5); vpoet::statictestfun1(); return 0;}

调用成功,截图如下

现在我们再静态成员函数中调用非静态成员变量

#include <iostream>using namespace std;class vpoet{public: static int a; int b;public: vpoet(int data) { b=data; } static void statictestfun1() { cout<<"static b="<<b<<endl; }};int vpoet::a=10;int main(){ vpoet *V; V=new vpoet(5); vpoet::statictestfun1(); return 0;}

编译下提示了错误:

大意是在静态成员函数中引用了类的非静态成员变量b。

其实这里可以再深入分析下:

静态成员变量的函数形参中没有默认的this指针指向类对象本身。所以当我们调用对象的非静态成员变量的时候它不能识别该变量

然而对于静态成员变量而言,其存在于整个类中,为每个类对象共有,所以就算没有默认的this形参仍然可以识别该静态成员变量

以上就是小编为大家带来的C++静态成员函数不能调用非静态成员变量(详解)全部内容了,希望大家多多支持~

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章