C++静态成员函数不能调用非静态成员变量(详解)
2016-12-22 10:08
639 查看
其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们
都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而非静态成员变量和非静态成员函数是针对类的对象而言。
然而从本质上来说类的静态成员函数的函数形参中没有默认的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++静态成员函数不能调用非静态成员变量(详解)全部内容了,希望大家多多支持脚本之家~
您可能感兴趣的文章:
相关文章推荐
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)
- C++静态成员函数不能调用非静态成员变量
- C++静态成员函数不能调用非静态成员变量
- C++静态成员(静态成员变量、静态成员函数)与正常成员互相调用的权限问题
- C++的静态成员变量和静态成员函数详解
- 结合上面的五个例子,对类的静态成员变量和成员函数作个总结: 一。静态成员函数中不能调用非静态成员。 二。非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所
- C++之静态成员变量和静态成员函数详解
- 静态成员函数如何调用非静态成员变量(函数参数不能任意扩展的情况)
- C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- 静态成员函数调用非静态成员变量
- C++/Java__中类模板中的静态成员变量和静态成员函数
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++静态成员变量和静态成员函数
- c++中非静态函数不能用类名调用,为什么CWnd的成员函数GetDC()可以直接调用啊?
- C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
- 静态成员函数调用非静态成员变量
- C++里的静态成员函数为何不能用const?
- C++之静态成员变量和静态成员函数