c++ - 一个面试题,求解答
高洛峰
高洛峰 2017-04-17 11:38:32
0
5
555
#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()出错,求解答

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(5)
Ty80

呼叫成員函數時會把this指標當作參數傳入,f1()函數體內還是cout<<"f1"<<endl;,這不會有問題。而f2()函數體內實際上是cout<<this->i<<endl;,this指標是NULL,所以會出錯

黄舟

沒有宣告對象,私有成員變數位址有個偏移會指向未知位址吧?

迷茫

是不是因為沒有實例化物件所以沒有呼叫建構函數,i裡沒有東西?同等答案。 。 。 。

刘奇

Myclass *p,p只是有Myclass的類別位址存取能力,但是沒有分配自己的資料堆,呼叫f1只是存取類別的函數,但是f2執行過程中存取了i這個變量,這個變數是不存在的,因為p的資料堆就不存在,所以問會出錯,同上面的this為空。

Peter_Zhu

各位都說的很好。
我就補個圖。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板