时间: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邮箱联系删除。
C++中静态成员函数访问非静态成员的实例实现代码:#include/*静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问非静态数据成员
c++中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。1、非静态数据成员被放在每一个对象体内作为对象专有的数据成员。2、静态数据成
C++中静态成员函数与静态成员变量(static)这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C
static主要有三个作用:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍
前言PHP群里有人询问self关键字的用法,答案是比较明显的:静态成员函数内不能用this调用非成员函数,但可以用self调用静态成员函数/变量/常量;其他成员