類要訪問一個成員函數, 其實是不需要一個類對象實體的,一個類對象的空指針就可以訪問,只要這個成員函數不訪問類成員變量,就一切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