亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++子類對象—子類對象的構造和析構

2020-05-23 14:25:31
字體:
來源:轉載
供稿:網友
對象在使用之前,始終是要經歷“構造”這個過程的。在第15章,我們了解到當一個對象的成員數據是另一個對象的時候,就先運行成員對象的構造函數,再運行父對象的構造函數。但是繼承的出現,會引入子類的構造函數。這時候,這些構造函數的運行順序又是怎樣的呢?

子類對象的構造

討論子類對象的構造,就是在討論子類對象的生成方式。它是先生成父類對象的成員,再對其進行擴展呢,還是先生成子類對象的成員,然后再對其進行補充?我們還是修改一下程序17.3.2,用事實來解決這個問題:(程序17.4.1)
//node.h和linklist.h同程序17.3.2
//stack.h
#include "linklist.h"
class Stack:private Linklist//私有繼承鏈表類
{
   public:
   bool push(int i,char c);
   bool pop(int &i,char &c);
   void show();
   Stack(int i,char c);
   Stack();
};
Stack::Stack(int i,char c):Linklist(i,c)//將子類構造函數的參數傳遞給父類的構造函數
{
   cout <<"Stack constructor with parameter is running..." <<endl;
}
Stack::Stack()//子類構造函數
{
   cout <<"Stack constructor is running..." <<endl;
}
bool Stack::push(int i,char c)
{
   while (pcurrent->next!=NULL)
   pcurrent=pcurrent->next;
   return Insert(i,c);
}
bool Stack::pop(int &i,char &c)
{
   while (pcurrent->next!=NULL)
   pcurrent=pcurrent->next;
   i=pcurrent->idata;
   c=pcurrent->cdata;
   return Delete();
}
void Stack::show()
{
   Show();
}
//main.cpp
#include <iostream>
#include "stack.h"
int main()
{
   Stack ss(1,'4');//調用帶參數的構造函數
   cout <<"Stack ss constructed" <<endl;
   ss.show();
   Stack zz; //調用不帶參數的構造函數
   cout <<"Stack zz constructed" <<endl;
   zz.show();
   return 0;
}

運行結果:
Node constructor is running...
Linklist constructor is running...
Stack constructor with parameter is running...
Stack ss constructed
1 4
Node constructor is running...
Linklist constructor is running...
Stack constructor is running...
Stack zz constructed
0 0
Linklist destructor is running...
Node destructor is running...
Linklist destructor is running...
Node destructor is running...

這個程序中有三個類,其中Stack類是Linklist類的子類,Node類的對象是Linklist類的成員數據。根據程序的運行結果,我們可以確定,父類的成員對象仍然是最先構造的,接著是運行父類的構造函數,最后運行子類的構造函數。也就是說子類對象是在父類對象的基礎上擴展而成的。

另外,如果我們希望把子類的構造函數的參數傳遞給父類的構造函數時,可以在子類的構造函數定義中用以下格式調用父類的構造函數:
    子類名::構造函數名(參數表):父類名(參數表)
如程序17.4.1就是用上述方法實現子類和父類的構造函數參數傳遞。這樣的方法不僅使子類對象的初始化變得簡單,并且使子類和父類的構造函數分工明確,易于維護。

子類對象的析構

在第15章中介紹析構函數的時候,我們就說它的運行順序往往是和構造函數的運行順序相反的。那么使用了繼承之后,是否依然是這樣的規律呢?我們繼續修改程序17.4.1,嘗試驗證我們的猜想。 
//node.h和linklist.h同程序17.3.2
//stack.h
#include "linklist.h"
class Stack:private Linklist
{
   public:
   bool push(int i,char c);
   bool pop(int &i,char &c);
   void show();
   Stack(int i,char c);
   Stack();
   ~Stack();//析構函數
};
Stack::Stack(int i,char c):Linklist(i,c)
{
   cout <<"Stack constructor with parameter is running..." <<endl;
}
Stack::Stack()
{
   cout <<"Stack constructor is running..." <<endl;
}
Stack::~Stack()
{
   cout <<"Stack destructor is running..." <<endl;
}
bool Stack::push(int i,char c)
{
   while (pcurrent->next!=NULL)
   pcurrent=pcurrent->next;
   return Insert(i,c);
}
bool Stack::pop(int &i,char &c)
{
   while (pcurrent->next!=NULL)
   pcurrent=pcurrent->next;
   i=pcurrent->idata;
   c=pcurrent->cdata;
   return Delete();
}
void Stack::show()
{
   Show();
}
//main.cpp
#include <iostream>
#include "stack.h"
int main()
{
   Stack zz;
   cout <<"Stack zz constructed" <<endl;
   zz.show();
   return 0;
}

運行結果:
Node constructor is running...
Linklist constructor is running...
Stack constructor is running...
Stack zz constructed
0 0
Stack destructor is running...
Linklist destructor is running...
Node destructor is running...

根據運行結果,我們可以確認:使用了繼承之后,析構函數的運行順序依然恰好與構造函數的運行順序相反。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频免费观看www| 亚洲va久久久噜噜噜久久天堂| 亚洲一级黄色av| 91av中文字幕| 久久国产精品久久久久久| 国产精品久久99久久| 日韩av中文字幕在线| 91中文精品字幕在线视频| 欧美裸体视频网站| 在线观看欧美视频| 亚洲 日韩 国产第一| 精品激情国产视频| 91在线观看免费网站| 欧美与黑人午夜性猛交久久久| 亚洲aⅴ男人的天堂在线观看| 欧美成人免费在线视频| 欧美中文字幕在线观看| 国产区精品在线观看| 永久555www成人免费| 91免费国产网站| 热re99久久精品国产66热| 日韩欧美成人免费视频| 97超视频免费观看| 亚洲综合视频1区| 亚洲一区二区三区久久| 国产精品久久久久不卡| 久久夜精品香蕉| 日本精品视频在线| 日本不卡视频在线播放| 日韩中文字幕免费看| www.日韩不卡电影av| 国产精品成人一区二区三区吃奶| 色婷婷久久一区二区| 国内精品久久久久久| 亚洲精品日韩欧美| 国产成+人+综合+亚洲欧美丁香花| 97久久精品人搡人人玩| www.久久久久久.com| 亚洲国产精品大全| 亚洲欧美日韩高清| 久久久精品999| 神马国产精品影院av| 国产精品亚洲综合天堂夜夜| 国产精品视频精品| 成人免费网站在线看| 欧美日韩国产综合新一区| 亚洲成人精品在线| 亚洲另类欧美自拍| 亚洲一区亚洲二区亚洲三区| 久久夜精品va视频免费观看| 在线播放国产一区中文字幕剧情欧美| 国产精品久久久久7777婷婷| 欧美一区二区色| 欧美疯狂做受xxxx高潮| 俺去了亚洲欧美日韩| 欧美亚洲在线观看| 国产精品日日摸夜夜添夜夜av| 北条麻妃99精品青青久久| 久久这里只有精品视频首页| 一区二区三区国产在线观看| 欧美色道久久88综合亚洲精品| 亚洲成人网在线| 自拍亚洲一区欧美另类| 国产综合在线观看视频| 91国在线精品国内播放| 亚洲最大的成人网| 亚洲男人的天堂网站| 亚洲国产精品网站| 国产成人精品免费视频| 欧美成人免费观看| 亚洲黄色在线观看| 久久免费在线观看| 日韩在线视频免费观看高清中文| 日韩有码片在线观看| 欧美日韩在线视频观看| 精品视频久久久| 国产成人精品久久久| 91九色国产视频| 日韩中文在线观看| 久久久久久久网站| 91国产美女在线观看| 色偷偷91综合久久噜噜| 国产亚洲欧美日韩一区二区| 欧美丝袜第一区| 日韩av在线免费播放| 91精品国产色综合久久不卡98口| 亚洲香蕉在线观看| 日韩电影中文字幕| 午夜精品久久久久久久99热| 亚洲天堂影视av| 成人网在线免费看| 亚洲成av人影院在线观看| 欧美自拍视频在线观看| 国产精品色视频| 国产有码在线一区二区视频| 久久国产精品影片| 欧美精品videosex性欧美| 国产亚洲成精品久久| 国产一区在线播放| 国产精品视频久久| 日韩精品在线免费播放| 亚洲高清福利视频| 亚洲欧美精品一区| 国产一区二区免费| 色七七影院综合| 久久久国产精彩视频美女艺术照福利| 正在播放亚洲1区| 亚洲人成绝费网站色www| 成人免费看片视频| 日韩精品一区二区视频| 伊人青青综合网站| 在线看欧美日韩| 九九精品在线视频| 亚洲乱码一区二区| 中文国产成人精品| 日本精品视频在线观看| 亲爱的老师9免费观看全集电视剧| 亚洲人成欧美中文字幕| 日本久久久久久久| 黑人精品xxx一区一二区| 欧美精品www在线观看| 国产在线精品自拍| 国产一区二区三区高清在线观看| 欧美又大又粗又长| 91av在线网站| 亚洲精品成人久久| 在线观看欧美成人| 亚洲欧美日韩精品久久亚洲区| 国产精品女人网站| 日韩在线观看免费网站| 日韩美女av在线免费观看| 日韩网站免费观看高清| 欧美精品videos性欧美| 国产精品久久久久久久久久小说| 日本久久久久久| 成人免费视频a| 91精品久久久久久久久久久久久| 成人免费看黄网站| 国产精品黄色影片导航在线观看| 欧美国产亚洲视频| 成人黄色在线播放| 亚洲va欧美va在线观看| 亚洲国产精品资源| 欧美性xxxxx极品| 欧美极品美女视频网站在线观看免费| 久久躁日日躁aaaaxxxx| 久久久最新网址| 中文字幕亚洲欧美一区二区三区| 日韩av手机在线| 国产精品扒开腿爽爽爽视频| 亚洲精品xxx| 欧美一区第一页| 欧美性高跟鞋xxxxhd| 51精品国产黑色丝袜高跟鞋| 久久av红桃一区二区小说| 欧美一区三区三区高中清蜜桃| 粉嫩老牛aⅴ一区二区三区| 欧美一区二区三区……| 国产精品久久国产精品99gif| 青青精品视频播放| 亚洲bt欧美bt日本bt| 国产精品久久久久久久久久三级| 成人免费淫片视频软件| 中文字幕国产日韩|