999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C++教學難點淺析

2010-10-27 08:15:46◆劉
中國校外教育 2010年8期

◆劉 晨

(青島科大技術專修學院)

C++教學難點淺析

◆劉 晨

(青島科大技術專修學院)

在對自考學生進行“C++程序設計”學習指導時,發現許多學生總是不能正確解答“動態分配內存”和“構造函數調用”這兩個重要的知識點相關的問題。本文就這兩個問題進行討論。

1 動態分配和釋放內存的問題

1.1 問題的提出

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

上例中,兩次動態定義的均是數組,但采用 delete釋放內存的方式確不同,且上機運行均能通過編譯,從而給人以兩種方式均正確的認識。

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

1.2 單個對象內存空間的動態分配和釋放

1.2.1 動態分配

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

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

注意:初始化部分的類型必須與內存分配的數據類型一致。

1.2.2 釋放內存

一般形式:delete指針名;語句作用:告訴系統釋放由 new分配的單個內存單元。

幾點注意:

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

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

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

1.3 數組的動態分配及釋放

1.3.1 動態分配

一般形式:數據類型 *指針名 =new數據類型[m];

語句作用:通過 new語句動態分配一個由指定的數據類型所要求的連續m個內存單元,并返回指向首個單元開始處的指針。

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

1.3.2 釋放內存

一般形式:數據類型 []指針名;

語句作用:告訴系統用[]釋放動態分配的數組。

注意:

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

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

例2動態分配對象數組。

說明:釋放對象數組時,用 delete[]形式,使對象數組中每個對象都調用一次析構函數,可將整個數組完整釋放。但是,如果將此例中 delete[]A;改為 delete A;,則運行結果變為:

此時只對數組中第一個元素調用了析構函數,即“delete指針;”命令只能釋放指針所指向的單元,不能為對象數組中每個對象都調用一次析構函數。

1.4 綜述

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

2 含有對象成員的派生類對象調用構造函數的順序問題

教材在第5章和第6章分別介紹了含有對象成員的類對象和派生類對象調用構造函數的順序問題,簡述如下。

2.1 含有對象成員的類對象調用構造函數的順序

2.1.1 知識點

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

在定義包含對象成員的類對象時,C++編譯器為對象成員調用構造函數的順序是按照對象成員在類中的聲明順序進行的,而與初始化列表中參數順序無關。

例 3對象成員調用構造函數的順序

例3說明

在類 container中,成員 one和 two都是 object類對象,聲明順序是 one、two。在有參構造函數初始化列表中one在后 two在前,但運行結果表明,系統是先為 one調用了 object類的有參構造函數,后為 two調用 object類的有參構造函數。從而驗證了前面所述結論。

2.2 不含對象成員的派生類對象調用構造函數的順序

知識點:

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

例4源程序

2.3 派生類有基類對象成員時派生類對象調用構造函數的順序

2.3.1 問題的提出

當派生類的數據成員中有基類對象成員時,系統將按怎樣的順序調用構造函數呢?先看看例題5。

例 5派生中有基類對象成員時,定義派生對象時調用構造函數的順序

例5運行結果

Point…1//為派生類對象 r調用基類 Point的有參構造函數

為繼承的數據成員 x賦值。

Point…2//為 Point類對象成員 a調用 Point類的有參構造函數

Rectangle…//為派生類對象 r調用派生類 Rectangle構造函數

2

.3.2結論

由上例可見,當派生類中含有基類對象成員時,調用基類構造函數的順序是:基類構造函數→對象成員應調用的構造函數→派生類構造函數。

3 結束語

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

[1]劉振安.C++程序設計.北京:機械工業出版社,2008.86-167.

[2]甘玲,李盤林.解析 C++面向對象程序設計.北京:清華大學出版社.

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

[4]曹靜,董寧,陳丹.C++面向對象程序設計.北京:中國水力水電出版社.

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

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

主站蜘蛛池模板: 日本高清免费一本在线观看| 久久综合亚洲色一区二区三区| 国产成人av一区二区三区| 精品久久国产综合精麻豆| 久久精品人妻中文视频| 在线观看91香蕉国产免费| 波多野结衣第一页| 亚洲第一页在线观看| 亚洲AⅤ永久无码精品毛片| 亚洲AV无码乱码在线观看代蜜桃 | 日本亚洲欧美在线| 国模私拍一区二区| 原味小视频在线www国产| 97综合久久| 亚州AV秘 一区二区三区| 激情综合婷婷丁香五月尤物 | 国产一级片网址| 成人91在线| 免费Aⅴ片在线观看蜜芽Tⅴ| 免费国产小视频在线观看| 欧美日韩国产在线观看一区二区三区| 黄色三级网站免费| 秋霞一区二区三区| 中文国产成人久久精品小说| 狠狠亚洲五月天| 精品小视频在线观看| 久久国产精品国产自线拍| 尤物视频一区| 99久久国产自偷自偷免费一区| 极品性荡少妇一区二区色欲 | 亚洲中文字幕久久无码精品A| 在线欧美日韩| 日韩精品无码免费一区二区三区| 日本高清成本人视频一区| 亚洲无码91视频| 久久久久久午夜精品| 国产精品国产三级国产专业不| 夜夜操狠狠操| 激情无码字幕综合| 久久精品aⅴ无码中文字幕| 精品夜恋影院亚洲欧洲| 在线观看精品国产入口| 在线精品欧美日韩| 国产婬乱a一级毛片多女| 毛片免费试看| 亚洲色图另类| 亚洲清纯自偷自拍另类专区| 青青操国产视频| 五月激情综合网| 曰AV在线无码| 日韩大片免费观看视频播放| 国产在线拍偷自揄拍精品| 国产97视频在线观看| 精品一区二区三区水蜜桃| 2048国产精品原创综合在线| 中文字幕 91| 成人夜夜嗨| a毛片基地免费大全| 日韩成人午夜| 国产麻豆福利av在线播放| 欧美视频免费一区二区三区| 国产日韩av在线播放| 国产第四页| 高清无码不卡视频| 亚洲浓毛av| 亚洲综合亚洲国产尤物| 一区二区三区在线不卡免费| 欧美a在线视频| 国产在线自乱拍播放| 午夜福利亚洲精品| 欧美在线精品一区二区三区| 国产免费好大好硬视频| 日韩区欧美国产区在线观看| 亚洲国产成熟视频在线多多| 宅男噜噜噜66国产在线观看| 欧美久久网| 中文字幕永久视频| 无码一区中文字幕| 色爽网免费视频| 国产剧情国内精品原创| 日韩国产精品无码一区二区三区| 成人综合网址|