国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向?qū)ο蟪绦蛟O計中構(gòu)造、析構(gòu)函數(shù)的教學探討

2019-03-04 11:05韓祥波
電腦知識與技術(shù) 2019年34期
關(guān)鍵詞:教學實踐

摘要:結(jié)合構(gòu)造、析構(gòu)函數(shù)出現(xiàn)的原因探討了構(gòu)造函數(shù)的三種形式,分析了拷貝構(gòu)造函數(shù)的三種調(diào)用方式,討論了全局對象、靜態(tài)對象、塊對象的構(gòu)造、析構(gòu)過程。通過卓越班面向?qū)ο蟪绦蛟O計中多次教學實踐證明,學生興趣提升,對知識點的理解更有深度。

關(guān)鍵詞:C++;析構(gòu);拷貝構(gòu)造函數(shù);全局對象;靜態(tài)對象;教學實踐

中圖分類號:G642 文獻標識碼:A

文章編號:1009-3044(2019)34-0168-02

1 概述

在C++中類的實例即對象的創(chuàng)建需要一系列初始化的工作,為此引入了構(gòu)造函數(shù)達到自動調(diào)用、分配內(nèi)存空間、初始化數(shù)據(jù)來創(chuàng)建對象的目的。由于其自動調(diào)用的特性決定了構(gòu)造函數(shù)的諸多要求:函數(shù)名和類名相同,且無返回值,可以重載,不能被繼承,不能用函數(shù)名調(diào)用。析構(gòu)函數(shù)則是與構(gòu)造函數(shù)相反:對結(jié)束生命周期的對象回收來釋放內(nèi)存。析構(gòu)函數(shù)也是自動調(diào)用并沒有函數(shù)返回值,不能被繼承,由于沒有形參無法實現(xiàn)函數(shù)重載,故類的析構(gòu)函數(shù)只能有1個,而構(gòu)造函數(shù)可以有多個。構(gòu)造函數(shù)常見形式有:默認構(gòu)造函數(shù)、普通的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)。默認構(gòu)造函數(shù)的特點是沒有參數(shù),若沒有定義構(gòu)造函數(shù),則編譯器自動生成一個無參構(gòu)造函數(shù)作為默認構(gòu)造函數(shù),而拷貝構(gòu)造函數(shù)僅有一個參數(shù),且參數(shù)類型是對自身類的引用,且與參數(shù)類型的構(gòu)造函數(shù)則為普通的構(gòu)造函數(shù)。

2 教學實踐

2.1 三種構(gòu)造函數(shù)并及拷貝構(gòu)造函數(shù)的三種調(diào)用方式

下面舉例來說明上述三種構(gòu)造函數(shù)并對拷貝構(gòu)造函數(shù)的復雜調(diào)用方式進行了探討。

#include

class Cobj{public:Cobi0{x=0;)Cobj(int In){x=m;)

Cobj(const Cobj&p)(x=p.x;cout《”Calling constructor:”<

intx;};

void fI(Cobj p)(cout<<”Calling fl”<

Cobj f20 {cout<<”Calling fl”《endl; Cobj

a(102);

re-turn a;}

main0 {Cobj a(lOI);Cobj b=a; f1(b);

b= f20;}

其中Cobi0(x=0;)為默認構(gòu)造函數(shù),將類的成員x初始為0;普通構(gòu)造函數(shù)Cobj(int m){x=m;)使得成員值為用戶設定值??截悩?gòu)造函數(shù)Cobj(const Cobj&p)的參數(shù)必須是本類的引用,此處的const不是必須項,加入的目的是保護傳人的實參不改變。主函數(shù)中Cobjb=a語句目的是用a初始化b從而第1次調(diào)用拷貝構(gòu)造函數(shù)。

fl(b)語句使得對象b作為funl的實參而第2次調(diào)用拷貝構(gòu)造函數(shù);語句b= f20使得函數(shù)的返回值是類對象,函數(shù)返回時調(diào)用拷貝構(gòu)造函數(shù)。

2.2 全局對象、靜態(tài)對象、塊對象的構(gòu)造與析構(gòu)

下面結(jié)合一個綜合實例來說明構(gòu)造函數(shù)、析構(gòu)函數(shù)的執(zhí)行順序。該實例包含全局對象、靜態(tài)對象、塊對象、自定義函數(shù)等復雜情況。

#include

class

Cobj( public: Cobj(int n){num=n;cout<<”constructor”<

-CobiO{cout<<”destructor”<

Cobj stl(lOOl);static Cobj st2(1002);voidfnO{Cobj st3(1003);】

mainO{cout《”begin”《endl; int i=l;Cobj st4(1004);

for(i=l;i<=2;i++) {static Cobj st5(1005); Cobj st6(1006);1

fn0; cout<<”end”<

執(zhí)行結(jié)果如圖2所示。

分析下執(zhí)行過程:啟動代碼會在啟動main0之前完成所有的初始化工作,因此在輸出”begin”前構(gòu)造全局對象1001,接著構(gòu)造靜態(tài)對象1002后才執(zhí)行主函數(shù)。在main0中先構(gòu)造對象1004,然后進入循環(huán)語句,在三次循環(huán)中對于普通對象1006每次循環(huán)都是先構(gòu)造,當本次循環(huán)結(jié)束時作為塊對象生命周期要結(jié)束,故調(diào)用析構(gòu)函數(shù)。主函數(shù)中的for語句用”(...)”代替時,塊內(nèi)定義的對象當塊執(zhí)行完畢后也要立刻釋放。如對象1007就屬于這種情況。而對于塊內(nèi)的1005對象由于是靜態(tài)對象只創(chuàng)造1次,在退出主函數(shù)時調(diào)用析構(gòu)函數(shù)才釋放。接著執(zhí)行fn0函數(shù)構(gòu)造對象1003,該函數(shù)執(zhí)行完畢后隨即釋放1003。最后退出主函數(shù)時釋放靜態(tài)對象1002和全局對象1001。首行代碼用#include 與命名空間模式則無法輸出”destructor1001”。即全局對象在不同的編譯情景下會有較大差異。

3 結(jié)論

構(gòu)造函數(shù)、析構(gòu)函數(shù)的自動調(diào)用使得不少同學迷茫,本文分析了這兩個函數(shù)出現(xiàn)的緣由,結(jié)合幾個教學案例分析了默認構(gòu)造函數(shù)、普通的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)的定義格式和使用方法,并對拷貝構(gòu)造函數(shù)的多種調(diào)用方式進行了代碼解析,通過全局對象、靜態(tài)對象、塊對象在程序中的構(gòu)造、析構(gòu)過程闡明了面向?qū)ο蟪绦蛟O計中對象這個特定角色的來世今生。

參考文獻:

[1]尹詩玉,方歡,基于C++語言的外部輸入若干問題的探討[J].電腦知識與技術(shù),2018(04).

[2] BjarneStroustrup.C++程序設計語言:特別版[M].裘宗燕,譯.北京:機械工業(yè)出版社,2010.

[3]譚浩強.C++面向?qū)ο蟪绦蛟O計[M].北京:清華大學出版社,2006.

[4]陳維興,林小茶.C++面向?qū)ο蟪绦蛟O計教程[M].北京:清華大學出版社,2000.

[5]錢能.C++程序設計教程[M].北京:清華大學出版社,1999.

[6]羅憲,王家偉,周建麗.“高級語言程序設計”“面向?qū)ο蟪绦蛟O計”精品課程教學改革與實踐[J].重慶交通大學學報(社會科學版),2009,9(1).

[7]孫振華,戎麗霞.淺談微課在高職計算機專業(yè)教學中的應用研究——以《C#程序設計》課程為例[J].電腦知識與技術(shù),2015(18).

[8] Stanley,B.Lippman,Barbara E.Moo.C++Primer中文版:第四版[M].李師賢,等譯.北京:人民郵電出版社,2006.

[9]呂鳳翥.C++語言基礎教程[M].北京:清華大學出版社,1999.

【通聯(lián)編輯:王力】

收稿日期:2019-09-23

作者簡介:韓祥波(1975-),男,山東淄博人,講師,碩士,研究方向為計算機軟件與理論。

猜你喜歡
教學實踐
立足課堂,因?qū)W施教
淺論高中化學生活化教學的實踐與思考
淺談初中物理實驗教學與學生創(chuàng)新能力的培養(yǎng)
測量平差課程教學改革探討與實踐
新余市| 长白| 安多县| 都兰县| 雷州市| 忻州市| 临澧县| 长子县| 孟州市| 禄丰县| 孟连| 江西省| 镇巴县| 陇西县| 宣化县| 新乐市| 勃利县| 浙江省| 奉化市| 安吉县| 将乐县| 汾西县| 昌黎县| 宁强县| 鲁山县| 天镇县| 泸州市| 土默特右旗| 屏边| 东安县| 武山县| 金门县| 思茅市| 新泰市| 略阳县| 涟水县| 永德县| 汽车| 阿克陶县| 兴安盟| 石景山区|