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

2025-05-27 0 27

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

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

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

下面我们来测试一下:

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
#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;

}

调用成功,截图如下

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
#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;

}

编译下提示了错误:

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

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

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

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

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

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++静态成员函数不能调用非静态成员变量(详解) https://www.kuaiidc.com/74461.html

相关文章

发表评论
暂无评论