代码:
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、静态成员变量要在类内声明,类外初始化。