亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C++教學(xué)難點(diǎn)淺析

        2010-10-27 08:15:46◆劉
        中國校外教育 2010年8期
        關(guān)鍵詞:基類數(shù)組指針

        ◆劉 晨

        (青島科大技術(shù)專修學(xué)院)

        C++教學(xué)難點(diǎn)淺析

        ◆劉 晨

        (青島科大技術(shù)專修學(xué)院)

        在對自考學(xué)生進(jìn)行“C++程序設(shè)計”學(xué)習(xí)指導(dǎo)時,發(fā)現(xiàn)許多學(xué)生總是不能正確解答“動態(tài)分配內(nèi)存”和“構(gòu)造函數(shù)調(diào)用”這兩個重要的知識點(diǎn)相關(guān)的問題。本文就這兩個問題進(jìn)行討論。

        1 動態(tài)分配和釋放內(nèi)存的問題

        1.1 問題的提出

        動態(tài)分配內(nèi)存幾乎是所有應(yīng)用程序的重要組成部分。C++提供的動態(tài)分配內(nèi)存是由 new和 delete兩個運(yùn)算符實現(xiàn)的,在自考教材中多處提到,其中在第10頁例 1.3和第 82頁例 4.8兩處出現(xiàn)如下:

        上例中,兩次動態(tài)定義的均是數(shù)組,但采用 delete釋放內(nèi)存的方式確不同,且上機(jī)運(yùn)行均能通過編譯,從而給人以兩種方式均正確的認(rèn)識。

        但是,在 2009年 10月全國試卷第 49題中,對用 data=new T[len]定義的動態(tài)數(shù)組,給出的標(biāo)準(zhǔn)答案只有一個即“delete[]data;”而不是“delete []data;”或“delete data;”。到底怎樣才是正確的呢?請看下面解答。

        1.2 單個對象內(nèi)存空間的動態(tài)分配和釋放

        1.2.1 動態(tài)分配

        一般形式:數(shù)據(jù)類型*指針名 =new數(shù)據(jù)類型(初值);

        語句作用:通過 new語句,動態(tài)分配一個能夠存儲指定數(shù)據(jù)類型數(shù)據(jù)的內(nèi)存單元,并把分配到的內(nèi)存初始化為某一個可知的初值,同時返回指向內(nèi)存的開始處的指針。

        注意:初始化部分的類型必須與內(nèi)存分配的數(shù)據(jù)類型一致。

        1.2.2 釋放內(nèi)存

        一般形式:delete指針名;語句作用:告訴系統(tǒng)釋放由 new分配的單個內(nèi)存單元。

        幾點(diǎn)注意:

        (1)用 new為指針分配內(nèi)存,稱為手工分配內(nèi)存,這種方式分配的內(nèi)存不能自動釋放(由系統(tǒng)定義變量時分配的內(nèi)存,當(dāng)不再使用時,系統(tǒng)將會自動釋放。),必須用 delete手工釋放。

        (2)delete必須用在先前已由 new成功分配內(nèi)存的有效指針上,若用在了未用 new分配內(nèi)存的指針上,將會帶來嚴(yán)重的問題,比如系統(tǒng)崩潰。

        (3)對于一個用 new分配內(nèi)存的指針,只能用一次 delete。

        1.3 數(shù)組的動態(tài)分配及釋放

        1.3.1 動態(tài)分配

        一般形式:數(shù)據(jù)類型 *指針名 =new數(shù)據(jù)類型[m];

        語句作用:通過 new語句動態(tài)分配一個由指定的數(shù)據(jù)類型所要求的連續(xù)m個內(nèi)存單元,并返回指向首個單元開始處的指針。

        注意:分配數(shù)組時不能給數(shù)組初始化,即不能給定初值。

        1.3.2 釋放內(nèi)存

        一般形式:數(shù)據(jù)類型 []指針名;

        語句作用:告訴系統(tǒng)用[]釋放動態(tài)分配的數(shù)組。

        注意:

        (1)用 delete釋放一個動態(tài)數(shù)組時,還必須用[]形式告訴 delete釋放多大的內(nèi)空間,否則內(nèi)存長期占用,很快就會耗盡,造成內(nèi)存泄漏。

        (2)用 delete釋放由 new分配數(shù)組時,只需用[],不必在括號中加數(shù)字說明數(shù)組長度。

        例2動態(tài)分配對象數(shù)組。

        說明:釋放對象數(shù)組時,用 delete[]形式,使對象數(shù)組中每個對象都調(diào)用一次析構(gòu)函數(shù),可將整個數(shù)組完整釋放。但是,如果將此例中 delete[]A;改為 delete A;,則運(yùn)行結(jié)果變?yōu)?

        此時只對數(shù)組中第一個元素調(diào)用了析構(gòu)函數(shù),即“delete指針;”命令只能釋放指針?biāo)赶虻膯卧?不能為對象數(shù)組中每個對象都調(diào)用一次析構(gòu)函數(shù)。

        1.4 綜述

        通過對動態(tài)分配和釋放單個內(nèi)存和數(shù)組兩種情況的討論可知,“delete指針名;”命令只能釋放由 new創(chuàng)建的單個存儲單元空間,只有用“delete []指針名;”方式才能釋放由 new創(chuàng)建的動態(tài)數(shù)組占用的所有空間。

        2 含有對象成員的派生類對象調(diào)用構(gòu)造函數(shù)的順序問題

        教材在第5章和第6章分別介紹了含有對象成員的類對象和派生類對象調(diào)用構(gòu)造函數(shù)的順序問題,簡述如下。

        2.1 含有對象成員的類對象調(diào)用構(gòu)造函數(shù)的順序

        2.1.1 知識點(diǎn)

        在類的聲明中,數(shù)據(jù)成員可以以另一種類為類型,稱為對象成員。

        在定義包含對象成員的類對象時,C++編譯器為對象成員調(diào)用構(gòu)造函數(shù)的順序是按照對象成員在類中的聲明順序進(jìn)行的,而與初始化列表中參數(shù)順序無關(guān)。

        例 3對象成員調(diào)用構(gòu)造函數(shù)的順序

        例3說明

        在類 container中,成員 one和 two都是 object類對象,聲明順序是 one、two。在有參構(gòu)造函數(shù)初始化列表中one在后 two在前,但運(yùn)行結(jié)果表明,系統(tǒng)是先為 one調(diào)用了 object類的有參構(gòu)造函數(shù),后為 two調(diào)用 object類的有參構(gòu)造函數(shù)。從而驗證了前面所述結(jié)論。

        2.2 不含對象成員的派生類對象調(diào)用構(gòu)造函數(shù)的順序

        知識點(diǎn):

        如果派生類中沒有對象成員,派生類對象定義時,C++編譯器也會自動調(diào)用派生構(gòu)造函數(shù),并通過派生構(gòu)造函數(shù)調(diào)用直接基類構(gòu)造函數(shù),其順序是:先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類構(gòu)造函數(shù)。

        例4源程序

        2.3 派生類有基類對象成員時派生類對象調(diào)用構(gòu)造函數(shù)的順序

        2.3.1 問題的提出

        當(dāng)派生類的數(shù)據(jù)成員中有基類對象成員時,系統(tǒng)將按怎樣的順序調(diào)用構(gòu)造函數(shù)呢?先看看例題5。

        例 5派生中有基類對象成員時,定義派生對象時調(diào)用構(gòu)造函數(shù)的順序

        例5運(yùn)行結(jié)果

        Point…1//為派生類對象 r調(diào)用基類 Point的有參構(gòu)造函數(shù)

        為繼承的數(shù)據(jù)成員 x賦值。

        Point…2//為 Point類對象成員 a調(diào)用 Point類的有參構(gòu)造函數(shù)

        Rectangle…//為派生類對象 r調(diào)用派生類 Rectangle構(gòu)造函數(shù)

        2

        .3.2結(jié)論

        由上例可見,當(dāng)派生類中含有基類對象成員時,調(diào)用基類構(gòu)造函數(shù)的順序是:基類構(gòu)造函數(shù)→對象成員應(yīng)調(diào)用的構(gòu)造函數(shù)→派生類構(gòu)造函數(shù)。

        3 結(jié)束語

        綜上所述,C++動態(tài)分配內(nèi)存是由 new和 delete兩個語句相互配合完成,在使用中應(yīng)注意分清分配的是單個內(nèi)存單還是數(shù)組,因為它們的空間在釋放時方法不同。派生類對象和對象成員調(diào)用構(gòu)造函數(shù)是有規(guī)律所循的。正確掌握和使用它們,對C++程序設(shè)計是非常重要的。

        [1]劉振安.C++程序設(shè)計.北京:機(jī)械工業(yè)出版社,2008.86-167.

        [2]甘玲,李盤林.解析 C++面向?qū)ο蟪绦蛟O(shè)計.北京:清華大學(xué)出版社.

        [3]徐士良,葛兵,徐艷.C++程序設(shè)計.北京:機(jī)械工業(yè)出版社,2006. 283-345.

        [4]曹靜,董寧,陳丹.C++面向?qū)ο蟪绦蛟O(shè)計.北京:中國水力水電出版社.

        [5]李春葆,陶紅艷,金晶.C++語言程序設(shè)計.北京:清華大學(xué)出版社.

        [6]劉玉英,張怡芳,王濤偉.程序設(shè)計基礎(chǔ) C++.北京:人民郵電出版社.

        猜你喜歡
        基類數(shù)組指針
        JAVA稀疏矩陣算法
        電腦報(2022年13期)2022-04-12 00:32:38
        基于C#面向?qū)ο蟪绦蛟O(shè)計的封裝、繼承和多態(tài)分析
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        電腦報(2020年24期)2020-07-15 06:12:41
        偷指針的人
        娃娃畫報(2019年5期)2019-06-17 16:58:10
        為什么表的指針都按照順時針方向轉(zhuǎn)動
        空戰(zhàn)游戲設(shè)計實例
        一種基于用戶興趣的STC改進(jìn)算法
        虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計C++》中的教學(xué)方法研究
        尋找勾股數(shù)組的歷程
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        亚洲无人区一码二码国产内射| 日本免费在线一区二区三区| av新型国产在线资源| 91熟女av一区二区在线| 久久久久人妻一区二区三区| 国产av一区二区精品凹凸| 无码久久精品国产亚洲av影片| 思思99热精品免费观看| 亚洲在线一区二区三区四区| 国产天堂av手机在线| 亚洲色图少妇熟女偷拍自拍| 自拍偷拍韩国三级视频| 日本高清一区二区三区在线观看| 亚洲国产精品国自产拍av| 爆爽久久久一区二区又大又黄又嫩 | 国产精品自产拍在线18禁 | 日日摸天天摸97狠狠婷婷| 成人毛片av免费| 国内精品久久久久久久久久影院| 国产人成视频免费在线观看| 精品国产一区二区三区av麻| 国产三级久久久精品麻豆三级| 日韩夜夜高潮夜夜爽无码| 无码人妻丰满熟妇片毛片| 国产成年无码久久久免费| 熟女丝袜美腿亚洲一区二区三区 | 日本免费一区精品推荐| 亚洲最近中文字幕在线 | 中文字幕一区在线观看视频| 久久久久亚洲av无码a片软件| 无码人妻少妇久久中文字幕蜜桃 | 国产在线高清理伦片a| 日韩av无码中文无码电影| 国产成人精品午夜福利| 中文AV怡红院| 日本精品人妻一区二区| 亚洲精品国产一二三区| 白又丰满大屁股bbbbb| 国产av天堂成人网| 亚洲一区二区情侣| 日本高清在线播放一区二区|