C++静态成员函数不能调用非静态成员变量(详解)
2019/7/10 22:52:22
本文主要是介绍C++静态成员函数不能调用非静态成员变量(详解),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们
都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而非静态成员变量和非静态成员函数是针对类的对象而言。
然而从本质上来说类的静态成员函数的函数形参中没有默认的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++静态成员函数不能调用非静态成员变量(详解)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享