代码:
1 class test{ 2 public: 3 static void f1(){cout<<y<<endl;} 4 void f2(){cout<<y<<endl;} 5 void f3(){cout<<x<<endl;} 6 void f4(int p){cout<<p<<endl;} 7 int x; 8 static int y; 9 }; 10 int test::y=1; 11 int main() 12 { 13 test* p=nullptr; 14 p->f1(); 15 p->f2(); 16 p->f3(); 17 p->f4(5); 18 getchar(); 19 return 0; 20 }
2.结果:
f1,f2,f4都会调用成功,f3调用失败。
解释:
p为null,所以这个类的this指针为null。调用非静态成员函数时,编译器会默认把this指针作为第一个参数!
f1本身为静态成员函数,调用静态成员变量y,不需要this指针,成功。
f2是普通成员函数,也可以调用静态成员变量y,不需要this指针,成功。
f3调用了普通成员变量,这时需要this指针了,但this为null,所以相当于调用cout<<null->x<<endl;这显然错误!
f4也不需要this指针,成功。
另外两个相关知识点:
1、静态成员函数只能调用静态成员变量,普通成员函数可以调用静态成员变量。
2、静态成员变量要在类内声明,类外初始化。
原文链接: https://www.cnblogs.com/FdWzy/p/12364934.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331973
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!