類的非虛成員函數的訪問-------腦子不好使,轉了下出來了,記下給自己留個醒

      類要訪問一個成員函數, 其實是不需要一個類對象實體的,一個類對象的空指針就可以訪問,只要這個成員函數不訪問類成員變量,就一切Ok

比如:

class CA
{
public:
       int fun()
     {

          int i = 0;
          return i;
     }
};

 

CA *pca = NULL; 

pca->fun();     //訪問ok

 

當函數中訪問了類成員變量時,問題出現了

 

class CA
{
public:
       int fun()
     {

          a = 0;   //其實是this->a

          int i = 0;
          return i;
     }

    int a;
};

 

CA *pca = NULL; 

pca->fun();     //訪問出錯,因爲隱形的this 指針爲NULL,那麼this->a=0就會崩潰

 

今天碰到一道這樣的題,應該是想考對象的內存佈局

class CA
{
public:
     int fun()
   {
       pi = 0;
       int i = 0;
       return i;
    }
    int pi;
};


class IA
{
public:
      IA()
     {
           pCa = new CA();
     }
private:
       CA *pCa;  //不能直接外部訪問
};

不能定義CA的對象,使用IA的對象如何訪問CA的成員函數 int fun(),

開始沒想出來, 後來仔細想想,原來可以使用對象的內存佈局來變相訪問
IA *pIa = new IA();

CA *pca = NULL;

memcpy(&pca,pIa,4); //把pIa所指向的CA對象內存值拷貝到pca自身地址,這樣pca就有了CA的對象實體了

pca->fun();                //訪問OK

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章