C++ this指针
this指针指向类对象的地址,当类的非静态成员函数中需要调用类的非静态成员变量时,编译器自动把this指针作为隐藏参数传递给成员函数。
如:class Date
{
public:
void set(int i)
{month=i;}
private:
int month;
}
其中,void set(int i)=void set(this,int i)=void set(&Date,int i)
一个this指针的题目
1 class NullPointCall 2 { 3 public: 4 static void call1(); 5 void call2(); 6 void call3(int x); 7 void call4(); 8 private: 9 static int m_a; 10 int m_b; 11 }; 12 13 int NullPointCall::m_a=0; 14 15 void NullPointCall::call1() 16 { 17 cout<<m_a<<endl; 18 } 19 20 void NullPointCall::call2() 21 { 22 cout<<"call2"<<endl; 23 } 24 25 void NullPointCall::call3(int x) 26 { 27 cout<<x<<endl; 28 } 29 30 void NullPointCall::call4() 31 { 32 cout<<m_b<<endl; 33 }
1 int main() 2 { 3 NullPointCall *pNull=NULL; 4 pNull->call1(); 5 pNull->call2(); 6 pNull->call3(5); 7 pNull->call4(); 8 return 0; 9 }
上述代码中,call1(),call2(),call3()都可以正常运行,call4()运行出错。
这是因为call1中使用的是静态成员变量,不需要使用this指针。call2()和call3()中没有使用成员变量,所以也不需要使用this指针。
但是call4()中使用了成员变量m_b,所以编译器编译的代码相当于
1 void NullPointCall::call4(this) 2 { 3 cout<<this->m_b<<endl; 4 }
当时pNull为NULL时,this指针也为NULL,所以运行出错
浙公网安备 33010602011771号