#include <iostream>
using namespace std;
class Myclass
{
public:
Myclass():i(0){};
void f1(){cout<<"f1"<<endl;}
void f2(){cout<<i<<endl;}
private:
int i;
};
int main()
{
Myclass *p = NULL;
// f1
p->f1();
// error
p->f2();
return 0;
}
如注释所说,p->f2()出错,求解答
呼叫成員函數時會把this指標當作參數傳入,
f1()
函數體內還是cout<<"f1"<<endl;
,這不會有問題。而f2()
函數體內實際上是cout<<this->i<<endl;
,this指標是NULL,所以會出錯沒有宣告對象,私有成員變數位址有個偏移會指向未知位址吧?
是不是因為沒有實例化物件所以沒有呼叫建構函數,i裡沒有東西?同等答案。 。 。 。
Myclass *p,p只是有Myclass的類別位址存取能力,但是沒有分配自己的資料堆,呼叫f1只是存取類別的函數,但是f2執行過程中存取了i這個變量,這個變數是不存在的,因為p的資料堆就不存在,所以問會出錯,同上面的this為空。
各位都說的很好。

我就補個圖。