2013-12-13 78 views
-1
#include"iostream" 
using namespace std; 
class base{ 

public: 
void f() 
     { 
     cout<<"base f:"<<endl; // prints base f: 
     } 
}; 


int main() 
{ 
base *b; // even same out put with " base *b =NULL; " 

b->f(); 
return 0; 
} 

O/P:基F:函數調用++

任何一個可以請解釋的函數是如何獲取調用而不將對象分配到指針。

Thanks. 

回答

3

與未初始化(或初始化爲0),指向對象成員函數的調用是不確定的行爲,但也可以工作,因爲沒有嘗試訪問對象的變量,這裏沒有虛函數表。你可以看一下這個功能就像

void f_base(base* p) 
{ 
    cout << "base f:" << endl; 
} 

沒有訪問 - 沒有錯誤,所有現代的編譯器,將工作,但它可以隨時改變。

0

這是無效的代碼,但由於base :: f()中沒有內容訪問成員變量,因此沒有無效的內存被觸及。

如果您添加一個成員並嘗試在函數中打印出來,您幾乎肯定會崩潰。

0

您需要使用new

base *b; // even same out put with " base *b =NULL; " 

應該

base *b = new base; 

...需要一個delete以防止內存泄漏