**說明:
類a,含建構函式和析構函式
普通函式fun,函式體裡新建了類a的區域性自動物件funobj和區域性靜態物件instaobj
main方法新建了類a的區域性自動物件mainobj,呼叫fun方法
外面新建了a的的外部靜態物件exstaobj和外部物件gblobj
#include輸出:#include
using namespace std;
class a {
char string[50];
public :
a(char * st);
~a( );
a::a(char * st)
strcpy(string, st);
cout << string << "被建立時呼叫建構函式 ! " << endl;
a::~a( )
cout << string <<
"被撤消時呼叫析構函式 ! " << endl;
void fun( )
cout << "在fun( )函式體內 : \n" << endl;
a funobj("fun( )函式體內的自動物件funobj");
static a instaobj("內部靜態物件instaobj");
int main( )
a mainobj("主函式體內的自動物件mainobj");
cout<
fun( );
cout << "\n主函式體內,呼叫fun()函式後:\n";
return 0;
static a exstaobj("外部靜態物件exstaobj");
a gblobj("外部物件gblobj");
外部靜態物件exstaobj被建立時呼叫建構函式 !若將a gblobj("外部物件gblobj"); 寫在static a exstaobj("外部靜態物件exstaobj");前面,則輸出時兩者順序也顛倒。外部物件gblobj被建立時呼叫建構函式 !
主函式體內的自動物件mainobj被建立時呼叫建構函式 !
主函式體內,呼叫fun()函式前:
在fun( )函式體內 :
fun( )函式體內的自動物件funobj被建立時呼叫建構函式 !
內部靜態物件instaobj被建立時呼叫建構函式 !
fun( )函式體內的自動物件funobj被撤消時呼叫析構函式 !
主函式體內,呼叫fun()函式後:
主函式體內的自動物件mainobj被撤消時呼叫析構函式 !
內部靜態物件instaobj被撤消時呼叫析構函式 !
外部物件gblobj被撤消時呼叫析構函式 !
外部靜態物件exstaobj被撤消時呼叫析構函式 !
(1)建立順序
外部靜態物件or外部物件優先於main函式
(2)銷毀順序
和建立順序相反,注意靜態物件會在main函式執行完才會銷毀
(1)從靜態儲存區分配:此時的內存在程式編譯的時候已經分配好,並且在程式的整個執行期間都存在。全域性變數,static變數等在此儲存
(2)在棧區分配:相關**執行時建立,執行結束時被自動釋放。區域性變數在此儲存。棧記憶體分配運算內置於處理器的指令集中,效率高,但容量有限
(3)在堆區分配:動態分配記憶體。用new/malloc時開闢,delete/free時釋放。生存期由使用者指定,靈活。但有記憶體洩露等問題
乙個例子記住C 物件的生存週期
標籤 c examples 說明 include include using namespace std class a a a char st a a void fun int main static a exstaobj 外部靜態物件exstaobj a gblobj 外部物件gblobj 輸出...
php 物件導向的乙個例子
複製 如下 php class person 下面是人的成員方法 function say 這個人可以說話的方法 function run 這個人可以走路的方法 這是乙個析構函adhctbj數,在物件銷毀前呼叫 function destruct 通過構造方法建立3個物件 p1,分別傳入三個不同的實...
C 多型的乙個例子
class a virtual void f2 static void f3 virtual void f4 class b virtual void f2 static void f3 virtual void f4 int main 執行結果 a f1 b f1 a f3 b f2 分析 類的成...