2015-05-09 167 views
0

您好我閱讀互聯網上這個定義..Oop中的對象範圍是什麼?

析構函數是執行 類的特殊成員函數時,它的類的對象超出範圍或每當 刪除表達式應用於一個指向該類的對象的指針。

我想這個代碼..

#include <iostream> 
using namespace std; 
class Name{ 
    public: 
     void Fun(){ 
      cout << "Function" << endl; 
     } 
     Name(){ 
      cout << "Constructor" << endl; 
     } 
     ~Name(){ 
      cout << "Destructor" << endl; 
     } 
}; 
int main(){ 
    Name obj; 
    obj.Fun(); 
    cout << "End" << endl; 
    return 0; 
} 

它在程序結束時調用析構函數.. !!平均對象範圍是程序的終點?對不起,我有點困惑......

+1

這是'main()函數,當本地對象'obj'超出範圍。 就你而言,'main()'也是程序的結尾,但這不是正常情況。 – RomanK

+0

你的意思是obj範圍是主體?與局部變量相同? – UnKnown

+0

它是局部變量。在這種情況下 - 是的,範圍是'main()'主體。 – HolyBlackCat

回答

3

在你的情況下,範圍的結束位於main函數的末尾,但它可以是任何其他範圍,具體取決於你定義obj的位置。例如:

int main(){ 
    // open a new scope here 
    { 
     // now 'obj' will be in the new scope 
     Name obj; 
     obj.Fun(); 
    } 
    // the scope ended here, 'obj' destroyed now 
    cout << "End" << endl; 
    return 0; 
} 

你可以找到more information here,看 「基本概念」 爲 「Scope」 和 「Lifetime」。

+0

很好的例子..!好一個..!!豎起大拇指.. :) – UnKnown

2

範圍是程序中的一個區域,用於定義在其中定義的對象的生命週期。在幾乎所有情況下,它都由花括號來定義。所以當你定義了函數的時候,它的主體定義了一個範圍。

main在範圍的定義方面沒有特別之處。

一些更多的情況:

int fun(){ // one scope 

    for(int i = 0; i < 1337; ++i){ // another scope 
    //note that i is defined within `for` scope not outside 
    } 

    if(true){ // same here 
    } 

    { // you can even start and end scope at will 
    A a; 
    } // a will die here 

    { // sometimes it is useful for redeclaring a variable, probably not best practice 
    A a; // this is legal 
    } 
} 
0

您已經創建的對象obj是一個變量,任何變量有範圍。範圍由創建變量的大括號定義。在你的情況下,你創建的obj的範圍是main函數,因爲它放在該函數的大括號之間。當主函數結束時,你的對象不再可用(它只在該函數中可用),這就是爲什麼析構函數被調用的原因。

您也可以只把你的對象爲大括號這樣定義自己的範圍:在節目結束,即後

main(){ 
    cout<<"scope of the main function"<<endl; 

    { 
     cout <<"scope where obj created"<<endl; 
     Name obj; 
    } 
    cout << "obj destroyed"<<endl; 

    cout << "End of main" <<endl; 
} 
0

在你的情況下,它的C#程序,在對象的情況下,結束它的可用性在main被執行後,如果對象沒有被程序員使用,它就會找到它的析構函數,那麼它的系統生成的析構函數將被執行,它將銷燬所有的對象並釋放內存。

+0

它也可能是當垃圾收集器做掃描。在運行過程中的任何時候都可能發生 – litelite