久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解

時(shí)間:2019-05-12 17:33:36下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解》。

第一篇:面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解

面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解 第1章 面向?qū)ο蟪绦蛟O(shè)計(jì)概論

一、名詞解釋 抽象 封裝 消息 【問題解答】

面向?qū)ο蠓椒ㄖ械某橄笫侵笇?duì)具體問題(對(duì)象)進(jìn)行概括,抽出一類對(duì)象的公共性質(zhì)并加以描述的過程。

面向?qū)ο蠓椒ㄖ械姆庋b就是把抽象出來的對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。

消息是面向?qū)ο蟪绦蛟O(shè)計(jì)用來描述對(duì)象之間通信的機(jī)制。一個(gè)消息就是一個(gè)對(duì)象要求另一個(gè)對(duì)象實(shí)施某種操作的一個(gè)請(qǐng)求。

二、填空題

(1)目前有面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法和面向?qū)ο蟮某绦蛟O(shè)計(jì)方法兩種重要的程序設(shè)計(jì)方法。(2)結(jié)構(gòu)化程序設(shè)計(jì)方法中的模塊由順序、選擇和循環(huán)3種基本結(jié)構(gòu)組成。

(3)在結(jié)構(gòu)化程序設(shè)計(jì)方法中,程序可表示為程序=數(shù)據(jù)結(jié)構(gòu)+算法; 而面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,程序可表示為程序=對(duì)象+消息。

(4)結(jié)構(gòu)化程序設(shè)計(jì)方法中的基本模塊是過程; 而面向?qū)ο蟪绦蛟O(shè)計(jì)方法中的基本模塊是類。(5)面向?qū)ο蟪绦蛟O(shè)計(jì)方法具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。

三、選擇題(至少選一個(gè),可以多選)

(1)面向?qū)ο蟪绦蛟O(shè)計(jì)著重于(B)的設(shè)計(jì)。

A.對(duì)象B.類C.算法D.數(shù)據(jù)

(2)面向?qū)ο蟪绦蛟O(shè)計(jì)中,把對(duì)象的屬性和行為組織在同一個(gè)模塊內(nèi)的機(jī)制叫做(C)。

A.抽象 B.繼承 C.封裝 D.多態(tài)(3)在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類通過(D)與外界發(fā)生關(guān)系。

A.對(duì)象 B.類 C.消息 D.接口(4)面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象與對(duì)象之間的通信機(jī)制是(C)。

A.對(duì)象 B.類 C.消息 D.接口(5)關(guān)于C++與C語言的關(guān)系的描述中,(D)是錯(cuò)誤的。

A.C語言是C++的一個(gè)子集 B.C語言與C++是兼容的 C.C++對(duì)C語言進(jìn)行了一些改進(jìn) D.C++和C語言都是面向?qū)ο蟮?/p>

【結(jié)果分析】

C語言是面向過程的。C++語言是一種經(jīng)過改進(jìn)的更為優(yōu)化的C語言,是一種混合型語言,既面向過程也面向?qū)ο蟆?/p>

(6)面向?qū)ο蟮某绦蛟O(shè)計(jì)將數(shù)據(jù)結(jié)構(gòu)與(A)放在一起,作為一個(gè)相互依存、不可分割的整體來處理。

A.算法 B.信息 C.數(shù)據(jù)隱藏 D.數(shù)據(jù)抽象(7)下面(A)不是面向?qū)ο笙到y(tǒng)所包含的要素。

A.重載 B.對(duì)象 C.類 D.繼承 【結(jié)果分析】

面向?qū)ο?對(duì)象+類+繼承+消息+多態(tài)(8)下面說法正確的是(BC)。

A.將數(shù)據(jù)結(jié)構(gòu)和算法臵于同一個(gè)函數(shù)內(nèi),即為數(shù)據(jù)封裝

B.一個(gè)類通過繼承可以獲得另一個(gè)類的特性 C.面向?qū)ο笠蟪绦騿T集中于事物的本質(zhì)特征,用抽象的觀點(diǎn)看待程序

D.同一消息為不同的對(duì)象接受時(shí),產(chǎn)生的行為是一樣的,這稱為一致性 【結(jié)果分析】

面向?qū)ο蟪绦蛟O(shè)計(jì)方法具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。將數(shù)據(jù)結(jié)構(gòu)和算法臵于同一個(gè)類內(nèi),即為數(shù)據(jù)封裝。同一消息為不同的對(duì)象接受時(shí),產(chǎn)生的行為可能是不一樣的,這稱為多態(tài)性。(9)下面說法正確的是(AD)。

A.對(duì)象是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,它可以存放代碼和數(shù)據(jù)

B.對(duì)象實(shí)際是功能相對(duì)獨(dú)立的一段程序

C.各個(gè)對(duì)象間的數(shù)據(jù)可以共享是對(duì)象的一大優(yōu)點(diǎn) D.在面向?qū)ο蟮某绦蛑校瑢?duì)象之間只能通過消息相互通信 【結(jié)果分析】

對(duì)象是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域。在對(duì)象中,不但存有數(shù)據(jù),而且存有代碼,使得每個(gè)對(duì)象在功能上相互之間保持相對(duì)獨(dú)立。對(duì)象之間存在各種聯(lián)系,但它們之間只能通過消息進(jìn)行通信。

四、判斷題

(1)在高級(jí)程序設(shè)計(jì)語言中,一般用類來實(shí)現(xiàn)對(duì)象,類是具有相同屬性和行為的一組對(duì)象的集合,它是創(chuàng)建對(duì)象的模板。(√)(2)C++語言只支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而不支持多態(tài)性。(×)【結(jié)果分析】

C++語言不僅支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而且支持多態(tài)性。

(3)面向?qū)ο蟪绦蛟O(shè)計(jì)中的消息應(yīng)該包含“如何做”的信息。(×)【結(jié)果分析】

消息是面向?qū)ο蟪绦蛟O(shè)計(jì)用來描述對(duì)象之間通信的機(jī)制。向?qū)ο蟆鞍l(fā)送消息”只需告訴對(duì)象做什么,對(duì)象根據(jù)這個(gè)消息決定如何做。

(4)一個(gè)消息只能產(chǎn)生特定的響應(yīng)效果。(×)【結(jié)果分析】

當(dāng)一個(gè)對(duì)象發(fā)出消息時(shí),由于接收對(duì)象的類型可能不同,所以,它們可能做出不同的反應(yīng)。這樣,一個(gè)消息可以產(chǎn)生不同的響應(yīng)效果,這種現(xiàn)象叫做多態(tài)。

(5)類的設(shè)計(jì)和類的繼承機(jī)制實(shí)現(xiàn)了軟件模塊的可重用性。(√)

(6)C++語言和Java語言均不是一個(gè)純正的面向?qū)ο蟮某绦蛟O(shè)計(jì)的語言。(×)【結(jié)果分析】

Java語言是一個(gè)純正的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。(7)學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)方法的唯一途徑。(×)【結(jié)果分析】

程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語言的一種技術(shù),學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的重要途徑之一。

(8)在C++語言中,類是支持?jǐn)?shù)據(jù)封裝的工具。(√)

五、簡(jiǎn)答題

(1)什么是結(jié)構(gòu)化程序設(shè)計(jì)方法?它有哪些優(yōu)點(diǎn)和缺點(diǎn)? 【問題解答】

結(jié)構(gòu)化程序設(shè)計(jì)方法著眼于系統(tǒng)要實(shí)現(xiàn)的功能,從系統(tǒng)的輸入輸出出發(fā),分析系統(tǒng)要做哪些事情,進(jìn)而考慮如何做這些事情,自頂向下地對(duì)系統(tǒng)的功能進(jìn)行分解,來建立系統(tǒng)的功能結(jié)構(gòu)和相應(yīng)的程序模塊結(jié)構(gòu),有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)。

隨著程序規(guī)模與復(fù)雜性的增長(zhǎng),這種面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法存在明顯的不足之處。首先是數(shù)據(jù)安全性問題。由于數(shù)據(jù)被每個(gè)模塊所共用,因此是不安全的,一旦出錯(cuò),很難查明原因。其次是可

維護(hù)性及可重用性差。它把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨(dú)立的實(shí)體,一旦數(shù)據(jù)結(jié)構(gòu)需要改變時(shí),常常要涉及整個(gè)程序,修改工作量極大并容易產(chǎn)生新的錯(cuò)誤。每一種相對(duì)于老問題的新方法都要帶來額外的開銷。另外,圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難。(2)什么是面向?qū)ο蟪绦蛟O(shè)計(jì)方法?它有哪些優(yōu)點(diǎn)? 【問題解答】

面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,將程序設(shè)計(jì)為一組相互協(xié)作的對(duì)象而不是一組相互協(xié)作的函數(shù)。在程序中,屬性用數(shù)據(jù)表示,用來描述對(duì)象靜態(tài)特征; 行為用程序代碼實(shí)現(xiàn),用來描述對(duì)象動(dòng)態(tài)特征。可見,在面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,對(duì)象是數(shù)據(jù)結(jié)構(gòu)和算法的封裝體。對(duì)象之間存在各種聯(lián)系,它們之間通過消息進(jìn)行通信。程序可表示為: 程序=對(duì)象+消息

在面向?qū)ο蟪绦蛟O(shè)計(jì)中應(yīng)著重于類的設(shè)計(jì)。類正是面向?qū)ο笳Z言的基本程序模塊,通過類的設(shè)計(jì)來完成實(shí)體的建模任務(wù)。類通過一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系。一個(gè)類中的操作不會(huì)處理到另一個(gè)類中的數(shù)據(jù),這樣程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。程序的執(zhí)行取決于事件發(fā)生的順序,由順序產(chǎn)生的消息來驅(qū)動(dòng)程序的執(zhí)行。不必預(yù)先確定消息產(chǎn)生的順序,更符合客觀世界的實(shí)際。并且面向?qū)ο蟪绦蛟O(shè)計(jì)方法提供了軟件重用、解決大問題和復(fù)雜問題的有效途徑,具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。

(3)結(jié)構(gòu)化程序設(shè)計(jì)方法與面向?qū)ο蟪绦蛟O(shè)計(jì)方法在對(duì)待數(shù)據(jù)結(jié)構(gòu)和算法關(guān)系上有 什么不同? 【問題解答】

結(jié)構(gòu)化程序設(shè)計(jì)方法中,把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨(dú)立的實(shí)體; 而在面向?qū)ο蟪绦蛟O(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)和算法封裝在一起,結(jié)合成一個(gè)獨(dú)立的單位,即對(duì)象,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)象的私有屬性只能由這個(gè)對(duì)象的行為來讀取和修改,與外部的聯(lián)系通過公有行為充當(dāng)外部接口。

第2章 從C到C++

一、名詞解釋

引用內(nèi)聯(lián)函數(shù)重載函數(shù) 【問題解答】

所謂引用就是給對(duì)象取一個(gè)別名,使用該別名可以存取該對(duì)象。換句話說是使新對(duì)象和原對(duì)象共用一個(gè)地址。

內(nèi)聯(lián)函數(shù)是使用inline關(guān)鍵字聲明的函數(shù)。重載函數(shù)指在同一個(gè)作用域內(nèi)名字相同而參數(shù)不同的函數(shù)。重載函數(shù)通常用來對(duì)具有相似行為而數(shù)據(jù)類型或數(shù)據(jù)個(gè)數(shù)不同的操作提供—個(gè)通用的名稱。

二、填空題

(1)一般情況下,用C++語言編寫的程序是由函數(shù)加上類組成的。

(2)C++有兩種注釋符號(hào),一種是//,另一種是 /*……*/。

(3)使用C++風(fēng)格的輸入輸出,在程序中必須包含頭文件“iostream”。

(4)cin是預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象,>>是輸入操作符,也稱提取運(yùn)算符。

(5)cout是預(yù)定義的標(biāo)準(zhǔn)輸出流對(duì)象,<<是輸出操作符,也稱插入運(yùn)算符。

(6)指針的值是它所指向那個(gè)對(duì)象的地址值。指針的類型是它所指向?qū)ο蟮念愋汀V羔樀膬?nèi)容便是它所指向?qū)ο蟮闹怠?/p>

(7)C++使用運(yùn)算符 & 來定義一個(gè)引用,對(duì)引用的存取都是對(duì)它所引用的對(duì)象的存取。(8)當(dāng)一個(gè)函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前時(shí),必須先用函數(shù)原型對(duì)函數(shù)進(jìn)行聲明。

(9)C++有值傳遞和引用傳遞兩種參數(shù)傳遞機(jī)制。

(10)使用關(guān)鍵字inline聲明的函數(shù)稱為內(nèi)聯(lián)函數(shù)。

(11)運(yùn)算符new用于進(jìn)行動(dòng)態(tài)內(nèi)存分配,運(yùn)算符delete用于釋放動(dòng)態(tài)分配的內(nèi)存。(12)下面程序的輸出結(jié)果為x=10,y=10; x=100,y=100。#include using namespace std;int main(){int x=10,&y=x;cout<<“x=”<

int *p=&y;*p=100;

cout<<“x=”<

三、選擇題(至少選一個(gè),可以多選)(1)在整型指針變量p2、p3的定義中,錯(cuò)誤的是(A)。

A.int p1,*p2,p3;B.int*p2,p1,*p3;C.int p1,*p2=&p1,*p3;D.int*p2,p1,*p3=&p1;【結(jié)果分析】

指針定義的具體格式如下所示: <類型> *<指針名1>,*<指針名2>,…;(2)若有定義“double xx=3.14,*pp=&xx; ”,則*pp等價(jià)于(C)。A.&xxB.*xxC.3.14D.xx 【結(jié)果分析】

pp指向xx所在的內(nèi)存單元,這樣*pp和xx等價(jià)。(3)下面對(duì)引用的描述中(C)是錯(cuò)誤的。A.引用是某個(gè)變量或?qū)ο蟮膭e名 B.建立引用時(shí),要對(duì)它初始化

C.對(duì)引用初始化可以使用任意類型的變量 D.引用與其代表的對(duì)象具有相同的地址 【結(jié)果分析】

所謂引用就是給對(duì)象取一個(gè)別名,使用該別名可以存取該對(duì)象,所以對(duì)引用初始化必須使用同類型的變量。

(4)函數(shù)沒有返回值的時(shí)候,應(yīng)該選擇(A)的函數(shù)類型。

A.void B.int C.不確定 D.float(5)在函數(shù)的定義格式中,下面各組成部分中,(D)是可以省略的。

A.函數(shù)名 B.函數(shù)體 C.返回值類型 D.函數(shù)參數(shù) 【結(jié)果分析】

函數(shù)的定義可以缺省形式參數(shù),此時(shí)稱為無參函數(shù)。

(6)對(duì)重載的函數(shù)來說,下面敘述不正確的是(D)。

A.參數(shù)的類型不同 B.參數(shù)的順序不同 C.參數(shù)的個(gè)數(shù)不同

D.參數(shù)的個(gè)數(shù)、類型、順序都相同,但函數(shù)的返回值類型不同 【結(jié)果分析】

對(duì)重載的函數(shù)來說,編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個(gè)數(shù)來判斷使用哪一個(gè)函數(shù),所以重載函數(shù)參數(shù)的個(gè)數(shù)、類型、順序不能都相同。

(7)下列有關(guān)設(shè)臵函數(shù)參數(shù)默認(rèn)值的描述中,(D)是正確的。

A.對(duì)設(shè)臵函數(shù)參數(shù)默認(rèn)值的順序沒有任何規(guī)定 B.函數(shù)具有一個(gè)參數(shù)時(shí)不能設(shè)臵默認(rèn)值 C.默認(rèn)參數(shù)要設(shè)臵在函數(shù)的原型中,而不能設(shè)臵在函數(shù)的定義語句中

D.設(shè)臵默認(rèn)參數(shù)可使用表達(dá)式,但表達(dá)式中不可用局部變量 【結(jié)果分析】

在C++中,在函數(shù)原型中可以為一個(gè)或多個(gè)參數(shù)指定默認(rèn)值。對(duì)函數(shù)參數(shù)設(shè)臵默認(rèn)值要注意以下幾點(diǎn)。

◆若沒有聲明函數(shù)原型,參數(shù)的默認(rèn)值可在函數(shù)定義的頭部進(jìn)行設(shè)臵,否則必須在函數(shù)原型中進(jìn)行設(shè)臵。

◆在一個(gè)指定了默認(rèn)值的參數(shù)右邊不能出現(xiàn)沒有指定默認(rèn)值的參數(shù)。

◆設(shè)臵默認(rèn)參數(shù)可使用表達(dá)式,但表達(dá)式中不可用局部變量。

(8)下面說法正確的是(BC)。A.所有的函數(shù)都可以說明為內(nèi)聯(lián)函數(shù)

B.具有循環(huán)語句、switch語句的函數(shù)不能說明為內(nèi)聯(lián)函數(shù)

C.使用內(nèi)聯(lián)函數(shù),可以加快程序執(zhí)行的速度,但會(huì)增加程序代碼的大小

D.使用內(nèi)聯(lián)函數(shù),可以減小程序代碼大小,但使程序執(zhí)行的速度減慢 【結(jié)果分析】

內(nèi)聯(lián)函數(shù)主要是解決程序的運(yùn)行效率問題。在程序編譯時(shí),編譯系統(tǒng)將程序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進(jìn)行替換,進(jìn)而減少了程序運(yùn)行的時(shí)間,但會(huì)增加程序代碼的大小。它是以空間換取時(shí)間,因此內(nèi)聯(lián)函數(shù)適用于功能不太復(fù)雜,但要求被頻繁調(diào)用的函數(shù)。

(9)一個(gè)函數(shù)功能不太復(fù)雜,但要求被頻繁調(diào)用,應(yīng)選用(A)。

A.內(nèi)聯(lián)函數(shù) B.重載函數(shù) C.遞歸函數(shù) D.嵌套函數(shù)

(10)C++對(duì)C語言做了很多改進(jìn),下列描述中

使得C語言發(fā)生了質(zhì)變,即從面向過程變成面向?qū)ο蟮氖牵―)。A.增加了一些新的運(yùn)算符

B.允許函數(shù)重載,并允許設(shè)臵默認(rèn)參數(shù) C.規(guī)定函數(shù)說明必須用原型 D.引進(jìn)了類和對(duì)象的概念 【結(jié)果分析】

面向?qū)ο?對(duì)象+類+繼承+消息+多態(tài)

四、判斷題

(1)C++程序中,不得使用沒有定義或說明的變量。(√)

(2)使用const說明常量時(shí),可以不必指出類型。(×)【結(jié)果分析】

如果用const 定義的是一個(gè)整型常量,則類型說明符int可以省略。

(3)引用被創(chuàng)建時(shí)可以用任意變量進(jìn)行初始化。(×)【結(jié)果分析】

對(duì)引用初始化必須使用同類型的變量。

(4)一個(gè)返回引用的調(diào)用函數(shù)可以作為左值。(√)

(5)函數(shù)可以沒有參數(shù),也可以沒有返回值。(√)

(6)沒有參數(shù)的兩個(gè)函數(shù)是不能重載的。(√)(7)函數(shù)可設(shè)臵默認(rèn)參數(shù),但不允許將一個(gè)函數(shù)的所有參數(shù)都設(shè)臵為默認(rèn)參數(shù)。(×)【結(jié)果分析】

函數(shù)可設(shè)臵默認(rèn)參數(shù),且允許將一個(gè)函數(shù)的所有參數(shù)都設(shè)臵為默認(rèn)參數(shù)。

(8)運(yùn)算符new分配的空間由運(yùn)算符delete釋放。(√)

五、簡(jiǎn)答題

(1)名字空間的用途是什么? 【問題解答】

名字空間用來防止命名的沖突。(2)引用有何用處? 【問題解答】

除了獨(dú)立引用外,在C++程序中,引用的主要用途是用作函數(shù)參數(shù)和函數(shù)的返回值。

(3)比較值調(diào)用和引用調(diào)用的相同點(diǎn)與不同點(diǎn)。【問題解答】

在值調(diào)用機(jī)制中,作為實(shí)參的表達(dá)式的值被復(fù)制到由對(duì)應(yīng)的形參名所標(biāo)識(shí)的一個(gè)對(duì)象中,作為形參的初始值。函數(shù)體對(duì)形參的訪問、修改都是在這個(gè)標(biāo)識(shí)對(duì)象上操作的,與實(shí)參無關(guān),即數(shù)據(jù)的傳遞是單向的。

使用引用作函數(shù)的形參時(shí),調(diào)用函數(shù)的實(shí)參要用變量名。實(shí)參傳遞給形參,相當(dāng)于在被調(diào)用函數(shù)中使用了實(shí)參的別名。于是,在被調(diào)用函數(shù)中對(duì)形參的操作實(shí)質(zhì)是對(duì)實(shí)參的直接操作,即數(shù)據(jù)的傳遞是雙向的。

(4)內(nèi)聯(lián)函數(shù)有什么作用?它有哪些特點(diǎn)? 【問題解答】

內(nèi)聯(lián)函數(shù)是使用inline關(guān)鍵字聲明的函數(shù)。在程序編譯時(shí),編譯系統(tǒng)將程序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進(jìn)行替換,進(jìn)而減少了程序運(yùn)行的時(shí)間。

使用內(nèi)聯(lián)函數(shù)應(yīng)注意以下幾點(diǎn)。◆遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。

◆內(nèi)聯(lián)函數(shù)一般適合于不含有switch和while等復(fù)雜的結(jié)構(gòu)且只有1~5條語句的小函數(shù),否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。

◆內(nèi)聯(lián)函數(shù)只能先定義后使用,否則編譯系統(tǒng)也將該函數(shù)視為普通函數(shù)。

◆對(duì)內(nèi)聯(lián)函數(shù)也不能進(jìn)行異常接口聲明。(5)函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎? 【問題解答】

不必一致。所有的參數(shù)是根據(jù)位臵和類型而不是名字來區(qū)分的。

(6)重載函數(shù)時(shí)通過什么來區(qū)分? 【問題解答】

編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個(gè)數(shù)來判斷使用哪一個(gè)函數(shù)。

六、程序分析題(寫出程序的輸出結(jié)果,并分析結(jié)果)

#include using namespace std;int main(){int num=50;int& ref=num;ref=ref+10;cout<<“num=”<

【輸出結(jié)果】 num=60 ref=100 【問題分析】

本題主要考查引用的含義。【結(jié)果分析】

程序首先定義一個(gè)int類型的對(duì)象num,并給它賦初始值50。然后又定義了一個(gè)int類型的引用ref,并將它和num相聯(lián)系。這樣,無論是對(duì)num還是對(duì)ref進(jìn)行操作,實(shí)際上都是對(duì)那個(gè)一開始放著50的物理單元的內(nèi)容進(jìn)行操作。

七、程序設(shè)計(jì)題

寫出一個(gè)完整的C++程序,使用系統(tǒng)函數(shù)pow(x,y)計(jì)算xy的值,注意包含頭文件cmath。【問題分析】

本題主要考查簡(jiǎn)單的輸入輸出和標(biāo)準(zhǔn)庫函數(shù)的調(diào)用方法。【解題思路】

① 由于要用到系統(tǒng)函數(shù)pow(x,y),所以要包含頭文件cmath。

② 要計(jì)算xy的值,首先必須知道x和y的值。為了程序的通用性,最好通過交互的方式輸入x和y的值。【參考程序】 // xt2_1.cpp #include #include using namespace std;int main(){float x,y;

cout<<“please input 2 floats to x,y:”;cin>>x>>y;

float z=pow(x,y);

cout<<“pow(”<

please input 2 floats to x,y:3.1 2 pow(3.1,2)=9.61 第3章 類 與 對(duì) 象

一、填空題

(1)類定義中關(guān)鍵字private、public和protected以后的成員的訪問權(quán)限分別是私有、公有和保護(hù)。如果沒有使用關(guān)鍵字,則所有成員默認(rèn)定義為private權(quán)限。具有public訪問權(quán)限的數(shù)據(jù)成員才能被不屬于該類的函數(shù)所直接訪問。(2)定義成員函數(shù)時(shí),運(yùn)算符“∷”是作用域運(yùn)算符,“MyClass∷”用于表明其后的成員函數(shù)是在“MyClass類”中說明的。

(3)在程序運(yùn)行時(shí),通過為對(duì)象分配內(nèi)存來創(chuàng)建對(duì)象。在創(chuàng)建對(duì)象時(shí),使用類作為樣板,故稱對(duì)象為類的實(shí)例。

(4)假定Dc是一個(gè)類,則執(zhí)行“Dc a[10],b(2)”語句時(shí),系統(tǒng)自動(dòng)調(diào)用該類構(gòu)造函數(shù)的次數(shù)為11。【結(jié)果分析】

創(chuàng)建10個(gè)數(shù)組元素需調(diào)用構(gòu)造函數(shù)10次,創(chuàng)建對(duì)象b需調(diào)用構(gòu)造函數(shù)1次,所以系統(tǒng)自動(dòng)調(diào)用該類構(gòu)造函數(shù)的總次數(shù)為11。

(5)對(duì)于任意一個(gè)類,析構(gòu)函數(shù)的個(gè)數(shù)最多為1個(gè)。

(6)delete運(yùn)算符通常用于實(shí)現(xiàn)釋放該類對(duì)象中指針成員所指向的動(dòng)態(tài)存儲(chǔ)空間的任務(wù)。(7)C++程序的內(nèi)存格局通常分為4個(gè)區(qū): 數(shù)據(jù)區(qū)、代碼區(qū)、棧區(qū)和堆區(qū)。

(8)數(shù)據(jù)定義為全局變量,破壞了數(shù)據(jù)的 封裝性; 較好的解決辦法是將所要共享的數(shù)據(jù)定義為類的 靜態(tài)成員。

(9)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)可由 任意訪問權(quán)限許可的函數(shù)訪問。

(10)友元函數(shù)和 友元類統(tǒng)稱為友元。(11)友元的正確使用能提高程序的效率,但破壞了類的封裝性和數(shù)據(jù)的隱蔽性。

(12)若需要把一個(gè)類A定義為一個(gè)類B的友元類,則應(yīng)在類B的定義中加入一條語句: friend class A。

二、選擇題(至少選一個(gè),可以多選)(1)以下不屬于類訪問權(quán)限的是(B)。A.public B.staticC.protectedD.private 【結(jié)果分析】

類的訪問權(quán)限有public、protected 和private。(2)有關(guān)類的說法不正確的是(BC)。A.類是一種用戶自定義的數(shù)據(jù)類型

B.只有類的成員函數(shù)才能訪問類的私有數(shù)據(jù)成員 C.在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是公有的

D.在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是私有的 【結(jié)果分析】

類是一種用戶自定義的數(shù)據(jù)類型,類中成員均具有一種訪問權(quán)限。關(guān)鍵字public、protected 和private以后的成員的訪問權(quán)限分別是公有、保護(hù)和私有的,所有成員默認(rèn)定義為private的。私有成員是被隱藏的數(shù)據(jù),只有該類的成員函數(shù)或友元函數(shù)才可以訪問它。

(3)在類定義的外部,可以被任意函數(shù)訪問的成員有(C)。

A.所有類成員 B.private或protected的類成員

C.public的類成員 D.public或private的類成員 【結(jié)果分析】

類是一種用戶自定義的數(shù)據(jù)類型,類中成員均具有一種訪問權(quán)限。公有成員定義了類的外部接口。私有成員是被隱藏的數(shù)據(jù),只有該類的成員函數(shù)或友元函數(shù)才可以引用它。保護(hù)成員具有公有成員和私有成員的雙重性質(zhì),可以被該類或派生類的成員函數(shù)或友元函數(shù)引用。可見在類定義的外部,可以被任意函數(shù)訪問的成員是public的類成員。(4)關(guān)于類和對(duì)象的說法(C)是錯(cuò)誤的。A.對(duì)象是類的一個(gè)實(shí)例

B.任何一個(gè)對(duì)象只能屬于一個(gè)具體的類 C.一個(gè)類只能有一個(gè)對(duì)象

D.類與對(duì)象的關(guān)系和數(shù)據(jù)類型與變量的關(guān)系相似 【結(jié)果分析】

C++語言的類就是一種用戶自己定義的數(shù)據(jù)類型,類和對(duì)象的關(guān)系就相當(dāng)于基本數(shù)據(jù)類型與它的變量的關(guān)系,所以任何一個(gè)對(duì)象只能屬于一個(gè)具體的類,但一個(gè)類可以有多個(gè)對(duì)象。

(5)設(shè)MClass是一個(gè)類,dd是它的一個(gè)對(duì)象,pp是指向dd的指針,cc是dd的引用,則對(duì)成員的訪問,對(duì)象dd可以通過(B)進(jìn)行,指針pp可以通過(D)進(jìn)行,引用cc可以通過(B)進(jìn)行。

A.∷ B..C.& D.->

(6)關(guān)于成員函數(shù)的說法中不正確的是(C)。A.成員函數(shù)可以無返回值 B.成員函數(shù)可以重載 C.成員函數(shù)一定是內(nèi)聯(lián)函數(shù) D.成員函數(shù)可以設(shè)定參數(shù)的默認(rèn)值 【結(jié)果分析】

與普通函數(shù)不同的是,成員函數(shù)是屬于某個(gè)類的。成員函數(shù)的實(shí)現(xiàn),可以放在類體內(nèi),也可以放在類體外。在類體外實(shí)現(xiàn)的成員函數(shù)不再是內(nèi)聯(lián)函數(shù)。(7)下面對(duì)構(gòu)造函數(shù)的不正確描述是(B)。A.系統(tǒng)可以提供默認(rèn)的構(gòu)造函數(shù)

B.構(gòu)造函數(shù)可以有參數(shù),所以也可以有返回值 C.構(gòu)造函數(shù)可以重載 D.構(gòu)造函數(shù)可以設(shè)臵默認(rèn)參數(shù) 【結(jié)果分析】

構(gòu)造函數(shù)不能指定返回類型,即使是void類型也不可以,當(dāng)然不可能有返回值。

(8)假定A是一個(gè)類,那么執(zhí)行語句“A a,b(3),*p; ”調(diào)用了(B)次構(gòu)造函數(shù)。A.1

B.2

C.3 D.4 【結(jié)果分析】

聲明指針是不會(huì)調(diào)用構(gòu)造函數(shù)的。

(9)下面對(duì)析構(gòu)函數(shù)的正確描述是(AC)。A.系統(tǒng)可以提供默認(rèn)的析構(gòu)函數(shù) B.析構(gòu)函數(shù)必須由用戶定義 C.析構(gòu)函數(shù)沒有參數(shù) D.析構(gòu)函數(shù)可以設(shè)臵默認(rèn)參數(shù) 【結(jié)果分析】

析構(gòu)函數(shù)的作用是在對(duì)象消失時(shí)執(zhí)行一項(xiàng)清理任務(wù)。如果一個(gè)類中沒有定義析構(gòu)函數(shù),系統(tǒng)將自動(dòng)生成一個(gè)默認(rèn)析構(gòu)函數(shù)。析構(gòu)函數(shù)沒有參數(shù),當(dāng)然不可能設(shè)臵默認(rèn)參數(shù)。

(10)類的析構(gòu)函數(shù)是(D)時(shí)被調(diào)用的。A.類創(chuàng)建 B.創(chuàng)建對(duì)象 C.引用對(duì)象 D.釋放對(duì)象

(11)創(chuàng)建一個(gè)類的對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用(B); 撤銷對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用(C)。

A.成員函數(shù) B.構(gòu)造函數(shù) C.析構(gòu)函數(shù) D.復(fù)制構(gòu)造函數(shù)

(12)通常拷貝構(gòu)造函數(shù)的參數(shù)是(C)。A.某個(gè)對(duì)象名 B.某個(gè)對(duì)象的成員名

C.某個(gè)對(duì)象的引用名 D.某個(gè)對(duì)象的指針名

(13)關(guān)于this指針的說法正確的是(B)。

A.this指針必須顯式說明B.當(dāng)創(chuàng)建一個(gè)對(duì)象后,this指針就指向該對(duì)象

C.成員函數(shù)擁有this指針D.靜態(tài)成員函數(shù)擁有this指針。【結(jié)果分析】

this指針是由C++編譯器自動(dòng)產(chǎn)生且較常用的一個(gè)隱含對(duì)象指針,它不能被顯式聲明。當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),this指針就初始化指向該對(duì)象。但只有非靜態(tài)成員函數(shù)才擁有this指針,并通過該指針來處理對(duì)象。

(14)下列關(guān)于子對(duì)象的描述中,(B)是錯(cuò)誤的。

A.子對(duì)象是類的一種數(shù)據(jù)成員,它是另一個(gè)類的對(duì)象

B.子對(duì)象可以是自身類的對(duì)象

C.對(duì)子對(duì)象的初始化要包含在該類的構(gòu)造函數(shù)中 D.一個(gè)類中能含有多個(gè)子對(duì)象作其成員 【結(jié)果分析】

子對(duì)象不可以是自身類的對(duì)象。

(15)對(duì)new運(yùn)算符的下列描述中,(B)是錯(cuò)誤的。

A.它可以動(dòng)態(tài)創(chuàng)建對(duì)象和對(duì)象數(shù)組 B.用它創(chuàng)建對(duì)象數(shù)組時(shí)必須指定初始值 C.用它創(chuàng)建對(duì)象時(shí)要調(diào)用構(gòu)造函數(shù)

D.用它創(chuàng)建的對(duì)象數(shù)組可以使用運(yùn)算符delete來一次釋放 【結(jié)果分析】

使用運(yùn)算符new創(chuàng)建對(duì)象數(shù)組的格式如下:

new <類型說明符> [<算術(shù)表達(dá)式>]

其中,<算術(shù)表達(dá)式>給出數(shù)組的大小,后面不能再跟構(gòu)造函數(shù)參數(shù),所以用它創(chuàng)建對(duì)象數(shù)組時(shí)不能指

定初始值。

(16)對(duì)delete運(yùn)算符的下列描述中,(D)是錯(cuò)誤的。

A.用它可以釋放用new運(yùn)算符創(chuàng)建的對(duì)象和對(duì)象數(shù)組

B.用它釋放一個(gè)對(duì)象時(shí),它作用于一個(gè)new所返回的指針

C.用它釋放一個(gè)對(duì)象數(shù)組時(shí),它作用的指針名前須加下標(biāo)運(yùn)算符[ ]

D.用它可一次釋放用new運(yùn)算符創(chuàng)建的多個(gè)對(duì)象 【結(jié)果分析】 用delete一次只能釋放用new創(chuàng)建的1個(gè)對(duì)象,但可釋放一個(gè)對(duì)象數(shù)組。

(17)關(guān)于靜態(tài)數(shù)據(jù)成員,下面敘述不正確的是(C)。

A.使用靜態(tài)數(shù)據(jù)成員,實(shí)際上是為了消除全局變量

B.可以使用“對(duì)象名.靜態(tài)成員”或者“類名∷靜態(tài)成員”來訪問靜態(tài)數(shù)據(jù)成員

C.靜態(tài)數(shù)據(jù)成員只能在靜態(tài)成員函數(shù)中引用 D.所有對(duì)象的靜態(tài)數(shù)據(jù)成員占用同一內(nèi)存單元 【結(jié)果分析】

靜態(tài)數(shù)據(jù)成員可以在靜態(tài)成員函數(shù)中引用,也可以在非靜態(tài)成員函數(shù)中引用。

(18)對(duì)靜態(tài)數(shù)據(jù)成員的不正確描述是(CD)。A.靜態(tài)成員不屬于對(duì)象,是類的共享成員 B.靜態(tài)數(shù)據(jù)成員要在類外定義和初始化 C.調(diào)用靜態(tài)成員函數(shù)時(shí)要通過類或?qū)ο蠹せ睿造o態(tài)成員函數(shù)擁有this指針

D.只有靜態(tài)成員函數(shù)可以操作靜態(tài)數(shù)據(jù)成員 【結(jié)果分析】

this指針是一個(gè)局部量,局部于某個(gè)對(duì)象,而靜態(tài)成員函數(shù)是屬于整個(gè)類而不是某個(gè)對(duì)象,它沒有this指針。靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)均可操作靜態(tài)數(shù)據(jù)成員。

(19)下面的選項(xiàng)中,靜態(tài)成員函數(shù)不能直接訪問的是(D)。

A.靜態(tài)數(shù)據(jù)成員 B.靜態(tài)成員函數(shù)

C.類以外的函數(shù)和數(shù)據(jù) D.非靜態(tài)數(shù)據(jù)成員 【結(jié)果分析】

由于靜態(tài)成員函數(shù)沒有this指針,它只能直接訪問該類的靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)和類以外的函數(shù)和數(shù)據(jù),訪問類中的非靜態(tài)數(shù)據(jù)成員必須通過參數(shù)傳遞方式得到對(duì)象名,然后通過對(duì)象名來訪問。

(20)在類的定義中,引入友元的原因是(A)。A.提高效率 B.深化使用類的封裝性

C.提高程序的可讀性 D.提高數(shù)據(jù)的隱蔽性 【結(jié)果分析】

友元的作用主要是為了提高效率和方便編程,但友元破壞了類的封裝性和隱蔽性,使用時(shí)要權(quán)衡利

弊。

(21)友元類的聲明方法是(A)。

A.friend class<類名>; B.youyuan class<類名>;

C.class friend<類名>; D.friends class<類名>;

(22)下面對(duì)友元的錯(cuò)誤描述是(D)。A.關(guān)鍵字friend用于聲明友元

B.一個(gè)類中的成員函數(shù)可以是另一個(gè)類的友元 C.友元函數(shù)訪問對(duì)象的成員不受訪問特性影響 D.友元函數(shù)通過this指針訪問對(duì)象成員 【結(jié)果分析】

友元函數(shù)是一個(gè)放在類中的普通函數(shù),它沒有this指針。

(23)下面選項(xiàng)中,(C)不是類的成員函數(shù)。A.構(gòu)造函數(shù) B.析構(gòu)函數(shù) C.友元函數(shù) D.拷貝構(gòu)造函數(shù)

三、簡(jiǎn)答題

(1)類與對(duì)象有什么關(guān)系? 【問題解答】

類是一種用戶自己定義的數(shù)據(jù)類型,和其他數(shù)據(jù)類型不同的是,組成這種類型的不僅可以有數(shù)據(jù),而且可以有對(duì)數(shù)據(jù)進(jìn)行操作的函數(shù)。程序員可以使用這個(gè)新類型在程序中聲明新的變量,具有類類型的變量稱為對(duì)象。創(chuàng)建對(duì)象時(shí),類被用做樣板,對(duì)象稱為類的實(shí)例。

(2)類定義的一般形式是什么?其成員有哪幾種訪問權(quán)限? 【問題解答】 定義類一般形式為:

class類名{ public:

<公有數(shù)據(jù)和函數(shù)>

protected:

<保護(hù)數(shù)據(jù)和函數(shù)>

private:

<私有數(shù)據(jù)和函數(shù)> };

訪問權(quán)限共有3種: 分別是公有(public)、保護(hù)(protected)和私有(private)。

(3)類的實(shí)例化是指創(chuàng)建類的對(duì)象還是定義類? 【問題解答】 指創(chuàng)建類的對(duì)象。

(4)什么是this指針?它的主要作用是什么? 【問題解答】

this指針是C++語言為成員函數(shù)提供的一個(gè)隱含對(duì)象指針,它不能被顯式聲明。this指針是一個(gè)局部量,局部于某個(gè)對(duì)象。不同的對(duì)象調(diào)用同一個(gè)成員函數(shù)時(shí),編譯器根據(jù)this指針來確定應(yīng)該引用哪一個(gè)對(duì)象的數(shù)據(jù)成員。

(5)什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用? 【問題解答】

拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它的作用是用一個(gè)已經(jīng)存在的對(duì)象去初始化另一個(gè)對(duì)象。為了保證所引用的對(duì)象不被修改,通常把引用參數(shù)聲明為const參數(shù)。

在以下3種情況下,拷貝構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用: ◆當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí);

◆當(dāng)函數(shù)的形參是類的對(duì)象,進(jìn)行形參和實(shí)參結(jié)合時(shí);

◆當(dāng)函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行完成返回調(diào)用者時(shí)。

四、程序分析題(寫出程序的輸出結(jié)果,并分析結(jié)果)(1)

#include

using namespace std;

class Test { private: int num;

public:

Test();// 默認(rèn)構(gòu)造函數(shù)

Test(int n);// 帶一個(gè)參數(shù)構(gòu)造函數(shù)

};

Test∷Test()

{

cout<<“Init defa”<

Test∷Test(int n)

{

cout<<“Init”<<“ ”<

int main()

{

Test x[2];// 語句1

Test y(15);// 語句2

return 0;}

【輸出結(jié)果】

Init defa

Init defa Init 15

【問題分析】

本題主要考查構(gòu)造函數(shù)的調(diào)用時(shí)機(jī)和構(gòu)造函數(shù)的匹配問題。【要點(diǎn)提示】

構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用,具體調(diào)用哪個(gè)構(gòu)造函數(shù)將由編譯系統(tǒng)根據(jù)重載函數(shù)的匹配原則來確定。【結(jié)果分析】

① 程序聲明了2個(gè)對(duì)象x和y,類中有2個(gè)構(gòu)造函數(shù)。

② 程序首先執(zhí)行語句1,創(chuàng)建對(duì)象x,調(diào)用默認(rèn)構(gòu)造函數(shù)。由于對(duì)象x是對(duì)象數(shù)組,每個(gè)數(shù)組元素被創(chuàng)建時(shí)都要調(diào)用構(gòu)造函數(shù),所以默認(rèn)構(gòu)造函數(shù)被調(diào)用了2次,輸出第1、2行結(jié)果。程序接著執(zhí)行語句2,創(chuàng)建對(duì)象y,調(diào)用帶一個(gè)參數(shù)的構(gòu)造函數(shù),輸出第3行結(jié)果。(2)

#include

using namespace std;class Xx { private: int num;public:

Xx(int x){num=x;} // 構(gòu)造函數(shù)

~Xx(){cout<<“dst ”<

};

int main()

{

Xx w(5);// 語句1

cout<<“Exit main”<

return 0;}

【輸出結(jié)果】

Exit main dst 5

【問題分析】

本題主要考查析構(gòu)函數(shù)的調(diào)用時(shí)機(jī)。【要點(diǎn)提示】

析構(gòu)函數(shù)在釋放對(duì)象時(shí)被自動(dòng)調(diào)用。【結(jié)果分析】

① 程序聲明了一個(gè)對(duì)象w。

② 程序首先執(zhí)行語句1,創(chuàng)建對(duì)象w,調(diào)用構(gòu)造函數(shù),num得到初值5。程序接著執(zhí)行語句2,輸出第1行結(jié)果。當(dāng)程序結(jié)束時(shí),釋放對(duì)象w,析構(gòu)函數(shù)被調(diào)用,輸出第2行結(jié)果。

(3)將例3.10中的Whole類如下修改,其他部分不變,寫出輸出結(jié)果。

class Whole { public:

Whole(int i);// Whole的有參構(gòu)造函數(shù)

Whole(){};// Whole的無參構(gòu)造函數(shù)

~Whole();// Whole的析構(gòu)函數(shù)

private:

Part p1;// 子對(duì)象1

Part p2;// 子對(duì)象2

Part p3;// 子對(duì)象3 };

Whole∷Whole(int i):p2(i),p1(){

cout<<“Constructor of Whole”<

Whole∷~Whole()

{

cout<<“Destructor of Whole”<

【輸出結(jié)果】

Default constructor of Part

Constructor of Part,3

Default constructor of Part

Constructor of Whole

Destructor of Whole

Destructor of Part,0

Destructor of Part,3

Destructor of Part,0

【問題分析】

本題主要考查子對(duì)象初始化的方法和含有子對(duì)象時(shí)構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。【要點(diǎn)提示】

◆當(dāng)建立X類的對(duì)象時(shí),先調(diào)用子對(duì)象的構(gòu)造函數(shù),初始化子對(duì)象,然后才執(zhí)行X類的構(gòu)造函數(shù),初始化X類中的其他成員。

◆對(duì)子對(duì)象構(gòu)造函數(shù)的調(diào)用順序取決于這些子對(duì)象在類中的說明順序,與它們?cè)诔蓡T初始化列表中給出的順序無關(guān)。

◆如果X類的構(gòu)造函數(shù)沒有給出成員初始化列表,表明子對(duì)象將使用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。◆析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序正好相反。【結(jié)果分析】

程序的Whole類中出現(xiàn)了類Part的3個(gè)對(duì)象p1、p2和p3,作為該類的數(shù)據(jù)成員,則p1、p2和p3被稱為子對(duì)象。當(dāng)建立Whole類的對(duì)象w時(shí),子對(duì)象p1、p2和p3被建立,相應(yīng)的構(gòu)造函數(shù)被執(zhí)行。由于p1在Whole類中先說明,所以先執(zhí)行它所使用的構(gòu)造函數(shù),即類Part的默認(rèn)構(gòu)造函數(shù),接著p2執(zhí)行它所使用的有參構(gòu)造函數(shù),緊接著初始化p3,由于Whole類構(gòu)造函數(shù)的成員初始化列表中沒有子對(duì)象p3進(jìn)行初始化的選項(xiàng),所以執(zhí)行類Part的默認(rèn)構(gòu)造函數(shù),當(dāng)所有子對(duì)象被構(gòu)造完之后,對(duì)象w的構(gòu)造函數(shù)才被執(zhí)行,從而得到前4行輸出結(jié)果,而后4行是執(zhí)行相應(yīng)析構(gòu)函數(shù)的輸出結(jié)果。(4)

#include

using namespace std;

class Book { public:

Book(int w);

static int sumnum;

private:

int num;};

Book∷Book(int w)

{ num=w;

sumnum-=w;}

int Book∷sumnum=120;// 語句1

int main()

{

Book b1(20);// 語句2

Book b2(70);// 語句3

cout<

return 0;}

【輸出結(jié)果】

【問題分析】

本題主要考查“在類的范圍內(nèi)所有對(duì)象共享靜態(tài)成員的數(shù)據(jù)”的含義。【結(jié)果分析】

程序中語句1對(duì)靜態(tài)成員sumnum進(jìn)行初始化,sumnum得到初值120。執(zhí)行語句2時(shí),調(diào)用構(gòu)造函數(shù),sumnum變?yōu)?00。接著語句3,再調(diào)用構(gòu)造函數(shù),sumnum變?yōu)?0。

五、程序設(shè)計(jì)題

(1)聲明一個(gè)Circle類,有數(shù)據(jù)成員radius(半

徑)、成員函數(shù)area(),計(jì)算圓的面積,構(gòu)造一個(gè)Circle的對(duì)象進(jìn)行測(cè)試。【問題分析】

本題主要考查類定義的形式、對(duì)象成員訪問和對(duì)象初始化的方法。要求理解類和構(gòu)造函數(shù)的真正含義,特別注意如何將客觀事物的屬性和行為抽象為類的成員。【解題思路】

① 題目中已給出了類的基本部分,需要增加一個(gè)構(gòu)造函數(shù)來初始化數(shù)據(jù)成員radius。

② 為了程序的通用性,圓的半徑由鍵盤輸入。【參考程序】

// xt3_1.cpp

#include

第二篇:《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》教案

《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程教案

課程編號(hào):08051230

課程名稱:面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-oriented Programming)學(xué)時(shí):72學(xué)時(shí),其中理論學(xué)時(shí)54,上機(jī)學(xué)時(shí)18 學(xué)分:3.5開課部門:數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 開課教研室:計(jì)算機(jī)科學(xué) 開課教師:雷小園 開課學(xué)期:第7學(xué)期

授課班級(jí):04信計(jì)

先修課程:C語言程序設(shè)計(jì)

考核要求:考試,平時(shí)10%,實(shí)驗(yàn)20%,考試70% 使用教材:

《C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第2版)》,陳維興,清華大學(xué)出版社,2004年 《C++面向?qū)ο蟪绦蛟O(shè)計(jì)習(xí)題解答與實(shí)驗(yàn)指導(dǎo)》,陳維興,清華大學(xué)出版社,2004年

教學(xué)目的與要求:

《面向?qū)ο蟪绦蛟O(shè)計(jì)》是一門計(jì)算機(jī)及相關(guān)專業(yè)的重要的專業(yè)基礎(chǔ)課。本課程講述C++語言面向?qū)ο蟮幕咎匦裕悺?duì)象、派生類、繼承、運(yùn)算符重載、多態(tài)性、虛函數(shù)、函數(shù)模板、類模板、輸入輸出、流類庫、文件等,使學(xué)生掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念和基本方法,能運(yùn)用C++語言進(jìn)行基本的面向?qū)ο蟪绦蛟O(shè)計(jì)。

教學(xué)方法:

采用板書講解C++程序設(shè)計(jì),再加以上機(jī)練習(xí)C++編程。

3章 類和對(duì)象

3.1 類與對(duì)象的基本概念

3.2 構(gòu)造函數(shù)與析構(gòu)函數(shù)

例:點(diǎn)類 Point class Point { private: int x,y;public: Point(){};Point(int xx, int yy){ x=xx;y=yy;} Point(Point &p){ x=p.x;y=p.y;} int GetX()const { return x;} int GetY()const { return y;} void SetXY(int xx, int yy){ x=xx;y=yy;} void Show();};void Point::Show(){ cout<<“X: ”<

例:人類 Person class Person { protected: char *name;int age;char sex;public: Person(char *n, int a, char s);Person(){ name = 0;age = 0;sex = ' ';} Person(Person &p);~Person(){ delete[] name;} void SetName(char *n);void SetAge(int a){ age = a;} void SetSex(int s){ sex = s;} char *GetName()const { return name;} int GetAge()const { return age;} char GetSex()const { return sex;} void Show();};

#include “person.h” #include using namespace std;

Person::Person(char *n, int a, char s){ name = new char[strlen(n)+1];strcpy(name,n);age = a;sex = s;} Person::Person(Person &p){ name = new char[strlen(p.name)+1];strcpy(name,p.name);age = p.age;sex = p.sex;} void Person::SetName(char *n){ delete[] name;name = new char[strlen(n)+1];strcpy(name,n);} void Person::Show(){ cout<<“Name: ”<

1、對(duì)象數(shù)組

所謂對(duì)象數(shù)組是指每一數(shù)組元素都是對(duì)象的數(shù)組。

2、對(duì)象指針

聲明對(duì)象指針的一般語法形式為:類名* 對(duì)象指針名。當(dāng)用指向?qū)ο蟮闹羔榿碓L問對(duì)象成員時(shí),要用“->”操作符。

3、this指針

C++為成員函數(shù)提供了一個(gè)名字為this的指針,這個(gè)指針稱為自引用指針。每當(dāng)通過一個(gè)對(duì)象調(diào)用一個(gè)成員函數(shù)時(shí),系統(tǒng)就自動(dòng)把這個(gè)this指針指向該對(duì)象。因此使用的數(shù)據(jù)成員就是該對(duì)象的數(shù)據(jù)成員。

3.4 向函數(shù)傳遞對(duì)象

1、使用對(duì)象作為函數(shù)參數(shù)

2、使用對(duì)象指針作為函數(shù)參數(shù)

3、使用對(duì)象引用作為函數(shù)參數(shù)

3.5 靜態(tài)成員

1、靜態(tài)數(shù)據(jù)成員

在一個(gè)類中,若將一個(gè)數(shù)據(jù)成員說明為static,這種成員稱為靜態(tài)數(shù)據(jù)成員。與一般的數(shù)據(jù)成員不同,無論建立多少個(gè)類的對(duì)象,都只有一個(gè)靜態(tài)數(shù)據(jù)的拷貝。從而實(shí)現(xiàn)了同一個(gè)類的不同對(duì)象之間的數(shù)據(jù)共享。

定義靜態(tài)數(shù)據(jù)成員的格式如下: static 數(shù)據(jù)類型 數(shù)據(jù)成員名;靜態(tài)數(shù)據(jù)成員在該類定義之外被初始化。訪問靜態(tài)數(shù)據(jù)成員可以通過對(duì)象或指針來訪問,也可以通過類名::來訪問。

2、靜態(tài)成員函數(shù)

定義靜態(tài)成員函數(shù)的格式如下: static 返回類型 靜態(tài)成員函數(shù)名(參數(shù)表);與靜態(tài)數(shù)據(jù)成員類似,調(diào)用公有靜態(tài)成員函數(shù)的一般格式有如下幾種: 類名::靜態(tài)成員函數(shù)名(實(shí)參表)對(duì)象.靜態(tài)成員函數(shù)名(實(shí)參表)對(duì)象指針->靜態(tài)成員函數(shù)名(實(shí)參表)

例:點(diǎn)類 Point(演示靜態(tài)成員)class Point { private: int x,y;static int count;public: Point(int xx=0, int yy=0){ x=xx;y=yy;count++;} Point(Point &p){ x=p.x;y=p.y;count++;} int GetX()const { return x;} int GetY()const { return y;} void SetXY(int xx, int yy){ x=xx;y=yy;} static int GetCount(){ return count;} };

int Point::count=0;

int main(){ Point a(100,200), b;cout<3.6 友元

1、友元函數(shù)

友元函數(shù)不是當(dāng)前類的成員函數(shù),而是獨(dú)立于當(dāng)前類的外部函數(shù),但它可以訪問該類的所有對(duì)象的成員,包括私有成員、保護(hù)成員和公有成員。

2、友元成員

一個(gè)類的成員函數(shù)也可以作為另一個(gè)類的友元,這種成員函數(shù)不僅可以訪問自己所在類對(duì)象中的所有成員,還可以訪問friend聲明語句所在類對(duì)象中的所有成員。

3、友元類

一個(gè)類也可以作為另一個(gè)類的友元。

友元關(guān)系是單向的,不具有交換性。若類X是類Y的友元,類Y不一定是類X的友元。友元關(guān)系也不具有傳遞性。若類X是類Y的友元,Y是類Z的友元,類X不一定是類Z的友元。

例:點(diǎn)類 Point(演示友元)class Point { private: int x,y;static int count;public: Point(int xx=0, int yy=0){ x=xx;y=yy;} int GetX()const { return x;} int GetY()const { return y;} void SetXY(int xx, int yy){ x=xx;y=yy;} friend double Dist(Point p1, Point p2);};

friend double Dist(Point p1, Point p2);{ double x,y;x=p1.x-p2.x;y=p1.y-p2.y;return sqrt(x*x+y*y);}

int main(){ Point a(100,200), b(300,400);cout<<“兩點(diǎn)間的距離為:”<

例:圓類 Circle(包含Point類的寫法)class Circle { private: double radius;//半徑 Point center;//圓心 public: Circle(){} Circle(int x, int y, double r): center(x,y){ SetRadius(r);} Circle(Point p, double r): center(p){ SetRadius(r);} double GetRadius()const { return radius;} void SetRadius(double r){ radius =(r>=0 ? r : 0);} void SetValue(int x, int y, double r){ center.SetXY(x,y);SetRadius(r);} double Area();void Show();};

const double PI=3.14159;inline double Circle::Area(){ return PI * radius * radius;}

void Circle::Show(){ cout<<“圓心為: ” center.Show();cout<<“半徑為: ”<

1、const引用

const引用的說明形式如下: const 類型說明符& 引用名

2、const對(duì)象

const對(duì)象的說明形式如下: const 類名 對(duì)象名[(參數(shù)表)];如:const Data Mybirthday(1980,1,1);const對(duì)象的數(shù)據(jù)成員值不能被改變,const對(duì)象必須進(jìn)行初始化。通過const對(duì)象只能調(diào)用它的const成員函數(shù),而不能調(diào)用普通成員函數(shù)。

3、const數(shù)據(jù)成員

const數(shù)據(jù)成員只能通過構(gòu)造函數(shù)的初始化列表來獲得初始值。

4、const成員函數(shù)

const成員函數(shù)的說明格式如下: 類型說明符 函數(shù)名(參數(shù)表)const;如:int GetYear()const { return year;} const成員函數(shù)不能更新對(duì)象的數(shù)據(jù)成員,也不能調(diào)用對(duì)象的普通成員函數(shù)。const是函數(shù)類型的一個(gè)組成部分,因此在函數(shù)的實(shí)現(xiàn)部分也要帶關(guān)鍵字const。

5、引用類型的數(shù)據(jù)成員

引用類型的數(shù)據(jù)成員也只能通過構(gòu)造函數(shù)的初始化列表來進(jìn)行初始化。

class Test { private: int a;const int b;//不能寫成const int b=10,因類的定義還沒分配空間 int &c;//不能寫成const int &c=a,因變量a還沒分配空間 public: Test(int i,int j,int &k):b(j),c(k){ a=i;} Test():b(10),c(a){ a=20;} } 第4章 派生類與繼承

4.1 派生類的概念

4.2 派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)

例:圓類 Circle(繼承Point類的寫法)class Circle: public Point { private: double radius;//半徑 public: Circle(){} Circle(int x, int y, double r): Point(x,y){ SetRadius(r);} Circle(Point p, double r): Point(p){ SetRadius(r);} double GetRadius()const { return radius;} void SetRadius(double r){ radius =(r>=0 ? r : 0);} void SetValue(int x, int y, double r){ SetXY(x,y);SetRadius(r);} double Area();void Show();};

const double PI=3.14159;inline double Circle::Area(){ return PI * radius * radius;}

void Circle::Show(){ cout<<“圓心為: ” Point::Show();cout<<“半徑為: ”<

1、派生類繼承了它的所有基類中除構(gòu)造函數(shù)和析構(gòu)函數(shù)之外的所有成員。

2、在派生類中成員按訪問屬性劃分為四種:不可訪問的成員、私有成員、保護(hù)成員、公有成員。

3、對(duì)從基類繼承下來的成員初始化工作是通過調(diào)用基類的構(gòu)造函數(shù)來完成的,調(diào)用方法是在派生類的構(gòu)造函數(shù)中用初始化列表。

4、如果在派生類的構(gòu)造函數(shù)省略了基類的初始化列表,則將調(diào)用基類的缺省構(gòu)造函數(shù)。

5、如果基類定義了帶有參數(shù)的構(gòu)造函數(shù)時(shí),派生類就應(yīng)當(dāng)定義構(gòu)造函數(shù),以便顯式地調(diào)用基類的構(gòu)造函數(shù)。

6、如果派生類定義了與基類同名的新數(shù)據(jù)成員或成員函數(shù),則此派生類的成員就覆蓋了基類的同名成員,直接使用成員名只能訪問到派生類的成員。

7、在同名覆蓋的情況下,可以使用基類名+作用域分辨符來訪問基類的同名成員。

8、如果派生類和基類的某個(gè)成員函數(shù)重名,但參數(shù)表不同,仍然屬于覆蓋,不屬于重載。

9、對(duì)派生類的對(duì)象,構(gòu)造函數(shù)的執(zhí)行過程是:先調(diào)用基類的構(gòu)造函數(shù)(按它們被繼承時(shí)聲明的順序),再調(diào)用內(nèi)嵌對(duì)象成員的構(gòu)造函數(shù)(按內(nèi)嵌對(duì)象聲明的順序),最后執(zhí)行自己的構(gòu)造函數(shù)體中的內(nèi)容。

10、析構(gòu)函數(shù)的調(diào)用次序正好和構(gòu)造函數(shù)的調(diào)用次序相反。

例:學(xué)生類 Student //student.h #include “person.h” class Student: public Person { protected: char *Department;int Number;public: Student(){ Department = 0;Number = 0;} Student(char *, int, char, char *, int);Student(Student &stu);~Student(){ delete[] Department;} void SetDep(char*);void SetNum(int num){ Number = num;} char *GetDep()const { return Department;} int GetNum()const { return Number;} void Show();};

//student.cpp #include “student.h” #include using namespace std;

Student::Student(char *name,int age,char sex,char *dep,int num): Person(name, age, sex){ Department = new char[strlen(dep)+1];strcpy(Department, dep);Number = num;}

Student::Student(Student &stu): Person(stu){ Department = new char[strlen(stu.Department)+1];strcpy(Department, stu.Department);Number = stu.Number;}

void Student::SetDep(char *dep){ delete[] Department;Department = new char[strlen(dep)+1];strcpy(Department, dep);}

void Student::Show(){ Person::Show();cout<<“Department: ” <

4.4 多重繼承

例1:X和Y是基類,Z從X和Y派生 class X { public: int b;X(int k){ b=k;} };class Y { public: int c;Y(int k){ c=k;} };class Z: public X, public Y { public: int d;Z(int i,int j,int k):X(i),Y(j){ d=k;} } 例2:X和Y都從W派生而來 class W { public: int a;W(int k){ d=k;} };class X: public W { public: int b;X(int i, int k): W(i){ b=k;} };class Y: public W { public: int c;Y(int i, int k): W(i){ c=k;} };class Z: public X, public Y { public: int d;Z(int i, int j, int k, int l): X(i,j),Y(i,k){ d=l;} } int main(){ Z t(10,20,30,40);cout<

例3:將W做為X和Y的虛基類 class W { public: int a;W(int k){ a=k;} };class X: virtual public W { public: int b;X(int i, int k): W(i){ b=k;} };class Y: virtual public W { public: int c;Y(int i, int k): W(i){ c=k;} };class Z: public X, public Y { public: int d;Z(int i, int j, int k, int l): W(i),X(i,j),Y(i,k){ d=l;} } int main(){ Z t(10,20,30,40);cout<

(2)建立一個(gè)對(duì)象時(shí),如果這個(gè)對(duì)象中含有從虛基類繼承來的成員,則虛基類的成員是由最遠(yuǎn)派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進(jìn)行初始化的。該派生類的其他基類對(duì)虛基類構(gòu)造函數(shù)的調(diào)用都自動(dòng)被忽略。

(3)若同一層次中同時(shí)包含虛基類和非虛基類,應(yīng)先調(diào)用虛基類的構(gòu)造函數(shù),再調(diào)用非虛基類的構(gòu)造函數(shù),最后調(diào)用派生類構(gòu)造函數(shù);(4)對(duì)于多個(gè)虛基類,構(gòu)造函數(shù)的執(zhí)行順序仍然是先左后右,自上而下;(5)對(duì)于非虛基類,構(gòu)造函數(shù)的執(zhí)行順序仍是先左后右,自上而下;(6)若虛基類由非虛基類派生而來,則仍然先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)。

4.5 賦值兼容規(guī)則

所謂賦值兼容規(guī)則是指在需要基類對(duì)象的任何地方都可以使用公有派生類的對(duì)象來替代。

附:線性表——順序表

class SeqList { private: int *data;int size;int MaxSize;public: SeqList(int sz=100);~SeqList(){ delete []data;} int Length()const { return size;} bool IsEmpty()const { return size==0;} void Insert(const int &x, int k);void Delete(int k);int GetData(int k)const;int Find(const int &x)const;void Show()const;};SeqList::SeqList(int sz){ MaxSize=sz;data=new int[MaxSize];size=0;}

void SeqList::Insert(const int &x, int k){ if(k<1 || k>size+1){ cerr<<“越界出錯(cuò)”;exit(1);} if(size==MaxSize){ cerr<<“順序表已滿”;exit(1);} for(int i=size-1;i>=k-1;i--)data[i+1]=data[i];data[k-1]=x;size++;}

void SeqList::Delete(int k){ if(size==0){ cerr<<“順序表空”;exit(1);} if(k<1 || k>size){ cerr<<“越界出錯(cuò)”;exit(1);} for(int i=k;i

int SeqList::GetData(int k)const { if(k<1 || k>size){ cerr<<“越界出錯(cuò)”;exit(1);} return data[k-1];}

int SeqList::Find(const int &x)const { for(int i=0;i

void SeqList::Show()const { for(int i=0;i

第5章 多態(tài)性

5.1 編譯時(shí)的多態(tài)性與運(yùn)行時(shí)的多態(tài)性

5.2 函數(shù)重載

5.3 運(yùn)算符重載

例:復(fù)數(shù)類Complex //mycomplex.h #include using namespace std;class Complex { private: double re, im;public: Complex(double r=0, double i=0){ re=r;im=i;} double real(){ return re;} double imag(){ return im;} Complex operator+(){ return *this;} Complex operator-(){ return Complex(-re,-im);} Complex &operator+=(Complex &);Complex &operator-=(Complex &);Complex &operator*=(Complex &);Complex &operator/=(Complex &);friend Complex operator+(Complex &, Complex &);friend Complex operator-(Complex &, Complex &);friend Complex operator*(Complex &, Complex &);friend Complex operator/(Complex &, Complex &);friend bool operator==(Complex &, Complex &);friend bool operator!=(Complex &, Complex &);friend ostream &operator<<(ostream &, Complex &);friend istream &operator>>(istream &, Complex &);operator double(){ return re;} };//mycomplex.cpp

#include“mycomplex.h” #include using namespace std;

Complex &Complex::operator+=(Complex &c){ re += c.re;im += c.im;return *this;}

Complex &Complex::operator-=(Complex &c){ re-= c.re;im-= c.im;return *this;}

Complex &Complex::operator*=(Complex &c){ double t = re * c.rere * c.im)/ m;re = t;return *this;}

Complex operator+(Complex &a, Complex &b){ return Complex(a.re + b.re, a.im + b.im);}

Complex operator-(Complex &a, Complex &b){ return Complex(a.reb.im);}

Complex operator*(Complex &a, Complex &b){ return Complex(a.re * b.rea.re * b.im)/ m);}

bool operator==(Complex &a, Complex &b){ return a.re == b.re && a.im == b.im;}

bool operator!=(Complex &a, Complex &b){ return a.re!= b.re || a.im!= b.im;}

ostream &operator<<(ostream &os, Complex &c){ os << c.re << '+' << c.im << 'i';return os;}

istream &operator>>(istream &is, Complex &c){ is >> c.re >> c.im;return is;} 例:分?jǐn)?shù)類 Fraction

#include using namespace std;

class Fraction { private: int num, den;void reduce();public: Fraction(int n=0, int d=1);Fraction operator+(){ return *this;} Fraction operator-(){ return Fraction(-num, den);} Fraction &operator+=(Fraction &);Fraction &operator-=(Fraction &);Fraction &operator*=(Fraction &);Fraction &operator/=(Fraction &);Fraction &operator++();Fraction operator++(int);operator double();friend Fraction operator+(Fraction &, Fraction &);friend Fraction operator-(Fraction &, Fraction &);friend Fraction operator*(Fraction &, Fraction &);friend Fraction operator/(Fraction &, Fraction &);friend bool operator==(Fraction &, Fraction &);friend bool operator!=(Fraction &, Fraction &);friend bool operator<(Fraction &, Fraction &);friend bool operator<=(Fraction &, Fraction &);friend bool operator>(Fraction &, Fraction &);friend bool operator>=(Fraction &, Fraction &);friend ostream &operator<<(ostream &, Fraction &);friend istream &operator>>(istream &, Fraction &);};#include “fraction.h” #include using namespace std;Fraction::Fraction(int n, int d){ num = n;den = d;if(den==0)den = 1;reduce();} Fraction &Fraction::operator+=(Fraction &f){ num = num * f.den + den * f.num;den = den * f.den;reduce();return *this;} Fraction &Fraction::operator-=(Fraction &f){ num = num * f.denx.den * y.num, x.den * y.den);} Fraction operator*(Fraction &x, Fraction &y){ return Fraction(x.num * y.num, x.den * y.den);} Fraction operator/(Fraction &x, Fraction &y){ return Fraction(x.num * y.den, x.den * y.num);} bool operator==(Fraction &x, Fraction &y){ return(x.num * y.den == x.den * y.num);} bool operator!=(Fraction &x, Fraction &y){ return!(x == y);} bool operator<(Fraction &x, Fraction &y){ return(x.num * y.den < x.den * y.num);} bool operator<=(Fraction &x, Fraction &y){ return!(y > x);} bool operator>(Fraction &x, Fraction &y){ return(y < x);} bool operator>=(Fraction &x, Fraction &y){ return!(x < y);} ostream &operator<<(ostream &os, Fraction &f){ return os << f.num << '/' << f.den;} istream &operator>>(istream &is, Fraction &f){ char ch;is >> f.num >> ch >> f.den;return is;} int gcd(int m, int n){ int k;while(n!= 0){ k = m % n;m = n;n = k;} return m;} void Fraction::reduce(){ if(den < 0){ num =-num;den =-den;} if(den == 1)return;int sgn = num<0 ?-1 : 1;int g = gcd(sgn*num, den);num /= g;den /= g;} 例:在人類Person中增加重載賦值運(yùn)算符 在Person.h中增加一個(gè)說明: Person & operator=(Person &);在Person.cpp中增加對(duì)該函數(shù)的定義 Person & Person::operator=(Person &p){ if(this==&p)return *this;delete [] name;name = new char[strlen(p.name)+1];strcpy(name,p.name);age = p.age;sex = p.sex;return *this;}

5.4 類型轉(zhuǎn)換

1、通過構(gòu)造函數(shù)將別的類型轉(zhuǎn)換為這個(gè)類的類型 如復(fù)數(shù)Complex類的構(gòu)造函數(shù) Complex(double r){ re=r;}

2、通過轉(zhuǎn)換函數(shù)講這個(gè)類的類型轉(zhuǎn)換為別的類型 如在復(fù)數(shù)Complex類中的轉(zhuǎn)換函數(shù) operator double(){ return re;} 在分?jǐn)?shù)Fraction類中的轉(zhuǎn)換函數(shù)

operator double(){ return static_cast(num)/ den;}

用explicit關(guān)鍵字,可以禁止單個(gè)參數(shù)的構(gòu)造函數(shù)用于自動(dòng)類型轉(zhuǎn)換,如 class Stack { explicit Stack(int size);? ? } Explicit也同樣禁止用賦值來進(jìn)行帶有類型轉(zhuǎn)換的初始化行為 如,不可以 Stack s=10;5.5 虛函數(shù)

1、引入派生類后的對(duì)象指針 例: class A { public: void show(){ cout<<“A”;} };class B:public A { public: void show(){ cout<<“B”;} };int main(){ A a,*pc;B b;pc=&a;pc->show();pc=&b;pc->show();} 輸出為AA

2、虛函數(shù)的定義及使用

例:引入虛函數(shù)后,上面的例子改為如下 class A { public: virtual void show(){ cout<<“A”;} };class B:public A { public: void show(){ cout<<“B”;} };int main(){ A a,*pc;B b;pc=&a;pc->show();pc=&b;pc->show();} 輸出為AB

3、純虛函數(shù)和抽象類 例: class A { public: virtual void show()=0;};class B:public A { public: void show(){ cout<<“B”;} };int main(){ A *pc;B b;pc=&b;pc->show();}

關(guān)于虛函數(shù),有以下幾點(diǎn)

1、如果成員函數(shù)是通過引用或指針,而不是通過對(duì)象來調(diào)用,那么,如果沒有使用virtual,程序?qū)⒏鶕?jù)引用類型或指針類型來選擇方法;如果使用了virtual,程序?qū)⒏鶕?jù)引用或指針指向的對(duì)象的類型來選擇方法。

2、如果要在派生類中重新定義基類的方法,則將它設(shè)置為虛擬方法,否則是指為非虛擬方法

3、如果使用指向?qū)ο蟮囊没蛑羔榿碚{(diào)用虛擬方法,程序?qū)⑹褂脼閷?duì)象類型定義的方法,而不使用為引用類型或指針類型定義的方法,這稱為動(dòng)態(tài)聯(lián)編或晚期聯(lián)編。

4、在基類方法的聲明中使用virtual可使該方法在基類以及所有的派生類中都是虛擬的。

5、一個(gè)未在派生類中定義的純虛函數(shù)仍舊還是一個(gè)純虛函數(shù),該派生類仍為一個(gè)抽象類。

6、通常應(yīng)給基類提供一個(gè)虛擬析構(gòu)函數(shù),這樣,當(dāng)派生類對(duì)象結(jié)束時(shí),將先調(diào)用派生的析構(gòu)函數(shù),再調(diào)用基類的析構(gòu)函數(shù)。

7、如果派生類沒有重新定義虛擬函數(shù),則將使用該函數(shù)的基類版本。

8、如果重新定義繼承的方法,應(yīng)確保與原來的原型完全相同。但有一個(gè)例外,就是如果返回類型是基類指針或引用,則可改為指向派生類的指針或引用。實(shí)驗(yàn) 基本C++程序設(shè)計(jì) 2 類和對(duì)象程序設(shè)計(jì) 3 派生與繼承程序設(shè)計(jì) 4 運(yùn)算符重載程序設(shè)計(jì) 5 模板程序設(shè)計(jì) 6 I/ O 流程序設(shè)計(jì)

第三篇:《面向?qū)ο蟪绦蛟O(shè)計(jì)》(c++)實(shí)驗(yàn)教學(xué)大綱

《面向?qū)ο蟪绦蛟O(shè)計(jì)》實(shí)驗(yàn)教學(xué)大綱 課程總學(xué)時(shí):64

學(xué)分:4

實(shí)驗(yàn)學(xué)時(shí):16

實(shí)驗(yàn)個(gè)數(shù): 6個(gè)實(shí)驗(yàn)學(xué)分:1分 課程性質(zhì):專業(yè)必修課適用專業(yè):計(jì)算機(jī)類專業(yè) 教材及參考書:《C++語言程序設(shè)計(jì)(第四版)》,鄭莉、董淵編著,北京:清華大學(xué)出版社,2011 大綱執(zhí)筆人:楊軍

大綱審定人:

一、實(shí)驗(yàn)課的性質(zhì)與任務(wù)

本課程實(shí)驗(yàn)大綱是面向計(jì)算機(jī)專業(yè)學(xué)生開設(shè)的《C++程序設(shè)計(jì)》實(shí)驗(yàn)課計(jì)劃指導(dǎo)大綱,是依據(jù)《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程教學(xué)計(jì)劃指導(dǎo)大綱編制。本課程主要講述了利用C++進(jìn)行程序設(shè)計(jì)的思想和方法,既有面向過程和面向?qū)ο蟮某绦蛟O(shè)計(jì)的理論知識(shí),又包括極強(qiáng)的實(shí)踐應(yīng)用能力的培養(yǎng)。本實(shí)驗(yàn)大綱力求結(jié)合該課程教學(xué)計(jì)劃大綱的相應(yīng)內(nèi)容,由淺入深的指導(dǎo)學(xué)生了解和掌握如何利用C++程序設(shè)計(jì)語言進(jìn)行程序設(shè)計(jì),提高學(xué)生的動(dòng)手能力,做到理論和實(shí)踐相結(jié)合,培養(yǎng)學(xué)生理解,分析程序,編寫,調(diào)試程序的能力,使之能把程序設(shè)計(jì)應(yīng)用到今后的專業(yè)學(xué)習(xí)中。

二、實(shí)驗(yàn)?zāi)康呐c要求 1.實(shí)驗(yàn)?zāi)康?/p>

通過本課程的學(xué)習(xí),使學(xué)生掌握面向過程的程序設(shè)計(jì)思想和編程思路,初步掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,學(xué)會(huì)調(diào)試程序,能獨(dú)立編寫實(shí)用的小型程序。2.實(shí)驗(yàn)要求

學(xué)生應(yīng)該自始至終貫徹課程中所介紹的程序設(shè)計(jì)風(fēng)格,養(yǎng)成良好的編程習(xí)慣; 應(yīng)獨(dú)立完成所布置習(xí)題。為保證盡量在統(tǒng)一安排的上機(jī)時(shí)間內(nèi)編譯運(yùn)行通過程序,學(xué)生應(yīng)事先設(shè)計(jì)好程序。

三、實(shí)驗(yàn)項(xiàng)目及內(nèi)容提要

面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)課程(071016)

序號(hào)

實(shí)驗(yàn)編號(hào)

實(shí)驗(yàn)名稱

學(xué)時(shí)

必做

選做

學(xué)分?jǐn)?shù) 實(shí)驗(yàn)類型

內(nèi)容提要

基本操作

驗(yàn)證

綜合設(shè)計(jì) 1

類與對(duì)象

函數(shù)重載,類的設(shè)計(jì)與使用 2 2

C++程序的結(jié)構(gòu)

作用域與生存期,靜態(tài)成員

3

數(shù)組、指針與字符串 √

√ 三種常見編程元素的使用

4

繼承與派生 √

派生類的設(shè)計(jì)與使用

5 多態(tài)性 √

運(yùn)算符重載、動(dòng)態(tài)多態(tài)

6

模板和文件 √

模板,異常處理機(jī)制的設(shè)計(jì)

四、實(shí)驗(yàn)內(nèi)容安排: 實(shí)驗(yàn)一類與對(duì)象

(設(shè)計(jì)性實(shí)驗(yàn)

4學(xué)時(shí))目的要求:

掌握類的定義和使用;掌握類對(duì)象的聲明;練習(xí)具有不同訪問屬性的成員的訪問方式;觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行過程; 學(xué)習(xí)類組合使用方法;

使用VC++的debug調(diào)試功能觀察程序流程,跟蹤觀察類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員函數(shù)的執(zhí)行順序。實(shí)驗(yàn)內(nèi)容:

編寫重載函數(shù)Max1可分別求取兩個(gè)整數(shù),三個(gè)整數(shù),兩個(gè)雙精度數(shù),三個(gè)雙精度數(shù)的最大值。

寫一個(gè)函數(shù),具有一個(gè)引用作為形參參數(shù),在函數(shù)中改變引用變量的值,觀察實(shí)參變量的變化。

定義一個(gè)CPU類,包含等級(jí)(Rank)、頻率(frequency)、電壓(voltage)等屬性,有兩個(gè)公有成員函數(shù)run、stop。其中,rank為枚舉類型CPU__Rank,定義為enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency為單位是MHz的整型數(shù),voltage為浮點(diǎn)型的電壓值。觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。定義一個(gè)簡(jiǎn)單的Computer類,有數(shù)據(jù)成員芯片(cpu)、內(nèi)存(ram)、光驅(qū)(cdrom)等等,有兩個(gè)公有成員函數(shù)run、stop。cpu為CPU類的一個(gè)對(duì)象,ram為RAM類的一個(gè)對(duì)象,cdrom為CDROM類的一個(gè)對(duì)象,定義并實(shí)現(xiàn)這個(gè)類,為以上的類編寫構(gòu)造和析構(gòu)函數(shù),觀察組合類和內(nèi)嵌類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。

為題目2)的類編寫復(fù)制構(gòu)造函數(shù),在主函數(shù)中利用復(fù)制構(gòu)造的方式創(chuàng)建新的對(duì)象,觀察對(duì)象的狀態(tài)。

思考并回答以下概念:函數(shù)重載,引用,類,對(duì)象,數(shù)據(jù)成員,函數(shù)成員,訪問屬性,構(gòu)造函數(shù),析構(gòu)函數(shù),類的組合,內(nèi)嵌對(duì)象,初始化列表,復(fù)制構(gòu)造函數(shù)。主要儀器設(shè)備及軟件:PC+Windows 2000+VC 6.0 實(shí)驗(yàn)二

C++程序的結(jié)構(gòu)(設(shè)計(jì)性實(shí)驗(yàn)

2學(xué)時(shí))目的要求:

觀察程序運(yùn)行中變量的作用域、生存期和可見性; 學(xué)習(xí)類的靜態(tài)成員的使用;

學(xué)習(xí)多文件結(jié)構(gòu)在C++程序中的使用。實(shí)驗(yàn)內(nèi)容:

實(shí)現(xiàn)客戶機(jī)(CLIENT)類。定義字符型靜態(tài)數(shù)據(jù)成員ServerName,保存其服務(wù)器名稱;整型靜態(tài)數(shù)據(jù)成員ClientNum,記錄已定義的客戶數(shù)量;定義靜態(tài)函數(shù)ChangeServerName()改變服務(wù)器名稱。

利用多文件結(jié)構(gòu)實(shí)現(xiàn)題目1),在頭文件client.h中定義類,在文件client.cpp中實(shí)現(xiàn)該類,在文件test.cpp 中測(cè)試這個(gè)類,觀察相應(yīng)的成員變量取值的變化情況,要求ClientNum能夠?qū)崟r(shí)記錄客戶機(jī)對(duì)象的數(shù)量。

思考并回答以下概念:類的靜態(tài)數(shù)據(jù)成員,類的靜態(tài)函數(shù)成員,多文件結(jié)構(gòu),文件包含。主要儀器設(shè)備及軟件:Windows 2000+VC 6.0 實(shí)驗(yàn)三數(shù)組、指針與字符串實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn)

4學(xué)時(shí))目的要求:

學(xué)習(xí)使用數(shù)組;學(xué)習(xí)字符串?dāng)?shù)據(jù)的組織和處理;學(xué)習(xí)標(biāo)準(zhǔn)C++庫的使用; 掌握指針的使用方法;練習(xí)通過debug觀察指針的內(nèi)容及其所指的對(duì)象的內(nèi)容;練習(xí)通過動(dòng)態(tài)內(nèi)存分配實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,并體會(huì)指針在其中的作用; 分別使用字符數(shù)組和標(biāo)準(zhǔn)C++庫練習(xí)處理字符串的方法。實(shí)驗(yàn)內(nèi)容:

編寫一個(gè)類用于處理3×3矩陣轉(zhuǎn)置,測(cè)試轉(zhuǎn)置的效果,輸出轉(zhuǎn)置前后的矩陣。

定義一個(gè)具有構(gòu)造函數(shù)和析構(gòu)函數(shù)的類,如實(shí)驗(yàn)一的CPU類,定義一個(gè)CPU的對(duì)象數(shù)組,觀察構(gòu)造函數(shù)的析構(gòu)函數(shù)的調(diào)用過程。利用動(dòng)態(tài)內(nèi)存分配的方式重新完成題目2)。

使用系統(tǒng)提供的string類定義字符串對(duì)象并初始化,實(shí)現(xiàn)從原始字符串中提取一個(gè)子串。選做:定義一個(gè)Point(二維點(diǎn)類)的對(duì)象數(shù)組,利用該數(shù)組實(shí)現(xiàn)直線的線性擬合。選做:定義一個(gè)動(dòng)態(tài)數(shù)組類。

思考并回答:數(shù)組,指針,對(duì)象數(shù)組,動(dòng)態(tài)內(nèi)存分配,默認(rèn)構(gòu)造函數(shù),標(biāo)準(zhǔn)類庫,字符串類 string,線性擬合。

3.主要儀器設(shè)備及軟件:Windows 2000+VC 6.0 實(shí)驗(yàn)四繼承與派生

(設(shè)計(jì)性實(shí)驗(yàn)

2學(xué)時(shí))目的要求:

學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類;熟悉不同繼承方式下對(duì)基類成員的訪問控制; 學(xué)習(xí)利用虛基類解決二義性問題。實(shí)驗(yàn)內(nèi)容:

定義一個(gè)基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會(huì)有什么問題,把 age改為公有成員變量,還會(huì)有問題嗎?編程試試看。

定義一個(gè)基類BaseClass,有整型成員變量Number,構(gòu)造其派生類DerivedClass,定義該派生類的對(duì)象,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。

定義一個(gè)車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類,汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcycle)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcycle派生出摩托車(Motorcar)類,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle 設(shè)置為虛基類,會(huì)有什么問?編程實(shí)驗(yàn)及分析原因。

思考并回答:繼承,派生,子類對(duì)基類成員的訪問權(quán)限,繼承方式,繼承時(shí)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序,虛基類

主要儀器設(shè)備及軟件:PC+Windows 2000+VC 6.0 實(shí)驗(yàn)五多態(tài)和運(yùn)算符重載(設(shè)計(jì)性實(shí)驗(yàn)

2學(xué)時(shí))目的要求:

掌握運(yùn)算符重載的方法;學(xué)習(xí)使用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。實(shí)驗(yàn)內(nèi)容: 定義Point類,有坐標(biāo)x,y兩個(gè)私有成員變量;對(duì)Point類重載“+”(相加)、“-”(相減)和“==”(相等)運(yùn)算符,實(shí)現(xiàn)對(duì)坐標(biāo)的改變,要求用友元函數(shù)和成員函數(shù)兩種方法實(shí)現(xiàn)。對(duì)Point類重載<<運(yùn)算符,以使得代碼 Point p;cout<

定義一個(gè)車(vehicle)基類,有虛函數(shù)Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,它們都有Run、Stop等成員函數(shù)。在主函數(shù)中用不同的方法調(diào)用Run、Stop成員函數(shù),觀察這些函數(shù)的執(zhí)行結(jié)果,思考如何實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性,如果Run、Stop沒有被定義為虛函數(shù),執(zhí)行結(jié)果會(huì)怎樣,把結(jié)果和分析寫入實(shí)驗(yàn)報(bào)告。選做,利用類完成求函數(shù)的積分(參考教材)。

思考并回答:多態(tài),實(shí)現(xiàn)多態(tài)性的方法,虛函數(shù),運(yùn)算符重載,前++,后++,實(shí)現(xiàn)運(yùn)算符重載的方式。

主要儀器設(shè)備及軟件:PC+Windows 2000+VC 6.0 實(shí)驗(yàn)六模板和文件

(設(shè)計(jì)性實(shí)驗(yàn)

2學(xué)時(shí))目的要求:

理解模板的作用和語法。

學(xué)習(xí)掌握C++文件處理類的基本用法。實(shí)驗(yàn)內(nèi)容:

使用函數(shù)模板實(shí)現(xiàn)一個(gè)求3個(gè)數(shù)最大值的函數(shù),并完成測(cè)試。

編寫程序,用二進(jìn)制方式打開指定的一個(gè)文件,在每一行前加行號(hào)。選做,練習(xí)使用STL中的vector模板類。選做,定義一個(gè)異常類CException,有成員函數(shù)Reason(),用來顯示異常的類型。在子函數(shù)中觸發(fā)異常,在主程序中處理異常,觀察程序的執(zhí)行過程。思考并回答:模板,函數(shù)模板,類模板,文件,文件讀寫,文件流類,文件操作方式,文件存儲(chǔ)方式; STL,容器,異常處理。

3.主要儀器設(shè)備及軟件:PC+Windows 2000+VC 6.0

五實(shí)驗(yàn)報(bào)告的格式(本部分要求各學(xué)院設(shè)計(jì)成表格作為教學(xué)大綱附件)

實(shí)驗(yàn)完畢,應(yīng)用專門的實(shí)驗(yàn)報(bào)告本,根據(jù)預(yù)習(xí)和實(shí)驗(yàn)中的現(xiàn)象及數(shù)據(jù)記錄等,及時(shí)而認(rèn)真地寫出實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告一般包括以下內(nèi)容: 實(shí)驗(yàn)(序號(hào))實(shí)驗(yàn)名稱

(一)實(shí)驗(yàn)?zāi)康?/p>

(二)儀器工具及材料列出實(shí)驗(yàn)中所使用的主要儀器工具及材料。

(三)內(nèi)容及程序應(yīng)簡(jiǎn)明扼要地寫出實(shí)驗(yàn)步驟流程。

(四)結(jié)果及分析應(yīng)用文字、表格、圖形等形式將數(shù)據(jù)表示出來。根據(jù)實(shí)驗(yàn)要求對(duì)數(shù)據(jù)進(jìn)行分析和誤差處理。

(五)問題討論結(jié)合有關(guān)理論對(duì)實(shí)驗(yàn)中的現(xiàn)象、產(chǎn)生的誤差等進(jìn)行討論和分析,以提高自己的分析問題、解決問題的能力,并提出應(yīng)注意的事項(xiàng),也為以后的科學(xué)研究打下一定的基礎(chǔ)。

六、考核方式、方法及實(shí)驗(yàn)成績(jī)?cè)u(píng)定方法

1、考核方式、方法:

面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)課成績(jī)占面向?qū)ο蟪绦蛟O(shè)計(jì)總成績(jī)的15%,即共15分。考核方法為采用實(shí)驗(yàn)課隨堂檢查學(xué)生完成情況及現(xiàn)場(chǎng)提問讓學(xué)生回答,根據(jù)學(xué)生完成情況及答辯情況給分次給出平時(shí)成績(jī),共5分。學(xué)生在完成實(shí)驗(yàn)后應(yīng)將自己的實(shí)驗(yàn)過程,結(jié)果,經(jīng)驗(yàn)寫入實(shí)驗(yàn)報(bào)告并提交實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告成績(jī)占10分,根據(jù)學(xué)生實(shí)驗(yàn)報(bào)告的書寫質(zhì)量及實(shí)驗(yàn)出勤情況打出。

2、實(shí)驗(yàn)成績(jī)?cè)u(píng)定方法:

評(píng)定各級(jí)成績(jī)時(shí),可參考以下標(biāo)準(zhǔn):

(一)優(yōu)秀(很好)14-15 能正確理解實(shí)驗(yàn)的目的要求,能獨(dú)立、順利而正確地完成各項(xiàng)實(shí)驗(yàn)操作,會(huì)分析和處理實(shí)驗(yàn)中遇到的問題,能掌握所學(xué)的各項(xiàng)實(shí)驗(yàn)技能,能較好地完成實(shí)驗(yàn)報(bào)告及其它各項(xiàng)實(shí)驗(yàn)作業(yè),有一定創(chuàng)造精神和能力。有良好的實(shí)驗(yàn)工作作風(fēng)和習(xí)慣。

(二)良好(較好)13-14 能理解實(shí)驗(yàn)的目的和要求,能認(rèn)真而正確地完成各項(xiàng)實(shí)驗(yàn)操作,能分析和處理實(shí)驗(yàn)中遇到的一些問題。能掌握所學(xué)實(shí)驗(yàn)技能的絕大部分,對(duì)難點(diǎn)較大的操作完成有困難。能一般完成實(shí)驗(yàn)報(bào)告和其它實(shí)驗(yàn)作業(yè)。有較好的實(shí)驗(yàn)習(xí)慣和工作作風(fēng)。

(三)中等(一般)11-12 能粗淺理解實(shí)驗(yàn)?zāi)康囊螅苷J(rèn)真努力進(jìn)行各項(xiàng)實(shí)驗(yàn)操作,但技巧較差。能分析和處理實(shí)驗(yàn)中一些較容易的問題,掌握實(shí)驗(yàn)技能的大部分。有30%掌握得不好。能一般完成各項(xiàng)實(shí)驗(yàn)作業(yè)和報(bào)告。處理問題缺乏條理。工作作風(fēng)較好。能認(rèn)真遵守各項(xiàng)規(guī)章制度。學(xué)習(xí)努力。

(四)及格(較差)8-9 只能機(jī)械地了解實(shí)驗(yàn)內(nèi)容,能一般性地按實(shí)驗(yàn)步驟完成實(shí)驗(yàn)操作,能完成60%所學(xué)的實(shí)驗(yàn)技能,有些雖作但不準(zhǔn)確。遇到問題常常缺乏解決的辦法,在別人啟發(fā)下能作些簡(jiǎn)單處理,但效果不理想。能一般完成實(shí)驗(yàn)報(bào)告,能認(rèn)真遵守實(shí)驗(yàn)室各項(xiàng)規(guī)章制度,工作中有小的習(xí)慣性毛病(如工作無計(jì)劃,處理問題缺乏條理)。

(五)不及格(很差)0-7 盲目地操作,只掌握50%的所學(xué)實(shí)驗(yàn)技能。有些實(shí)驗(yàn)雖能作,但一般效果不好,操作不正確。工作忙亂無條理。一般能遵守實(shí)驗(yàn)室規(guī)章制度,但常有小的錯(cuò)誤。實(shí)驗(yàn)報(bào)告較多的時(shí)候有結(jié)果,遇到問題時(shí)說不明原因,在教師指導(dǎo)下也較難完成各項(xiàng)實(shí)驗(yàn)作業(yè)。或有些小聰明但不努力,不求上進(jìn)。

七、實(shí)驗(yàn)主要應(yīng)配套儀器設(shè)備及臺(tái)(套)數(shù)(以一個(gè)實(shí)驗(yàn)教學(xué)班40人為標(biāo)準(zhǔn))序號(hào)

儀器設(shè)備名稱

數(shù)量

備注

計(jì)算機(jī)

40臺(tái)

C++開發(fā)工具軟件

1套

網(wǎng)絡(luò)版

八、主要教材及參考書

《C++語言程序設(shè)計(jì)習(xí)題與實(shí)驗(yàn)指導(dǎo)》,鄭莉、傅仕星編著,北京:清華大學(xué)出版社,2004

第四篇:面向?qū)ο蟪绦蛟O(shè)計(jì)教程 答案

面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解與課程設(shè)計(jì)指導(dǎo)

第1章

面向?qū)ο蟪绦蛟O(shè)計(jì)概論

一、名詞解釋 抽象封裝消息 【問題解答】

面向?qū)ο蠓椒ㄖ械某橄笫侵笇?duì)具體問題(對(duì)象)進(jìn)行概括,抽出一類對(duì)象的公共性質(zhì)并加以描述的過程。

面向?qū)ο蠓椒ㄖ械姆庋b就是把抽象出來的對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。

消息是面向?qū)ο蟪绦蛟O(shè)計(jì)用來描述對(duì)象之間通信的機(jī)制。一個(gè)消息就是一個(gè)對(duì)象要求另一個(gè)對(duì)象實(shí)施某種操作的一個(gè)請(qǐng)求。

二、填空題(1)目前有面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法和面向?qū)ο蟮某绦蛟O(shè)計(jì)方法兩種重要的程序設(shè)計(jì)方法。

(2)結(jié)構(gòu)化程序設(shè)計(jì)方法中的模塊由順序、選擇和循環(huán)3種基本結(jié)構(gòu)組成。(3)在結(jié)構(gòu)化程序設(shè)計(jì)方法中,程序可表示為程序=數(shù)據(jù)結(jié)構(gòu)+算法; 而面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,程序可表示為程序=對(duì)象+消息。(4)結(jié)構(gòu)化程序設(shè)計(jì)方法中的基本模塊是過程; 而面向?qū)ο蟪绦蛟O(shè)計(jì)方法中的基本模塊是類。

(5)面向?qū)ο蟪绦蛟O(shè)計(jì)方法具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。

三、選擇題(至少選一個(gè),可以多選)

(1)面向?qū)ο蟪绦蛟O(shè)計(jì)著重于(B)的設(shè)計(jì)。A.對(duì)象B.類C.算法D.數(shù)據(jù)(2)面向?qū)ο蟪绦蛟O(shè)計(jì)中,把對(duì)象的屬性和行為組織在同一個(gè)模塊內(nèi)的機(jī)制叫做(C)。

A.抽象 B.繼承 C.封裝 D.多態(tài)

(3)在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類通過(D)與外界發(fā)生關(guān)系。A.對(duì)象 B.類 C.消息 D.接口

(4)面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象與對(duì)象之間的通信機(jī)制是(C)。A.對(duì)象 B.類 C.消息 D.接口

(5)關(guān)于C++與C語言的關(guān)系的描述中,(D)是錯(cuò)誤的。A.C語言是C++的一個(gè)子集 B.C語言與C++是兼容的

C.C++對(duì)C語言進(jìn)行了一些改進(jìn) D.C++和C語言都是面向?qū)ο蟮?/p>

【結(jié)果分析】

C語言是面向過程的。C++語言是一種經(jīng)過改進(jìn)的更為優(yōu)化的C語言,是一種混合型語言,既面向過程也面向?qū)ο蟆?/p>

(6)面向?qū)ο蟮某绦蛟O(shè)計(jì)將數(shù)據(jù)結(jié)構(gòu)與(A)放在一起,作為一個(gè)相互依存、不可分割的整體來處理。A.算法 B.信息 C.數(shù)據(jù)隱藏 D.數(shù)據(jù)抽象(7)下面(A)不是面向?qū)ο笙到y(tǒng)所包含的要素。

A.重載 B.對(duì)象 C.類 D.繼承 【結(jié)果分析】

面向?qū)ο?對(duì)象+類+繼承+消息+多態(tài)(8)下面說法正確的是(BC)。

A.將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個(gè)函數(shù)內(nèi),即為數(shù)據(jù)封裝 B.一個(gè)類通過繼承可以獲得另一個(gè)類的特性

C.面向?qū)ο笠蟪绦騿T集中于事物的本質(zhì)特征,用抽象的觀點(diǎn)看待程序 D.同一消息為不同的對(duì)象接受時(shí),產(chǎn)生的行為是一樣的,這稱為一致性 【結(jié)果分析】

面向?qū)ο蟪绦蛟O(shè)計(jì)方法具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。將數(shù)據(jù)結(jié)構(gòu)和算法置于同一個(gè)類內(nèi),即為數(shù)據(jù)封裝。同一消息為不同的對(duì)象接受時(shí),產(chǎn)生的行為可能是不一樣的,這稱為多態(tài)性。(9)下面說法正確的是(AD)。

A.對(duì)象是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,它可以存放代碼和數(shù)據(jù) B.對(duì)象實(shí)際是功能相對(duì)獨(dú)立的一段程序

C.各個(gè)對(duì)象間的數(shù)據(jù)可以共享是對(duì)象的一大優(yōu)點(diǎn)

D.在面向?qū)ο蟮某绦蛑校瑢?duì)象之間只能通過消息相互通信 【結(jié)果分析】

對(duì)象是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域。在對(duì)象中,不但存有數(shù)據(jù),而且存有代碼,使得每個(gè)對(duì)象在功能上相互之間保持相對(duì)獨(dú)立。對(duì)象之間存在各種聯(lián)系,但它們之間只能通過消息進(jìn)行通信。

四、判斷題

(1)在高級(jí)程序設(shè)計(jì)語言中,一般用類來實(shí)現(xiàn)對(duì)象,類是具有相同屬性和行為的一組對(duì)象的集合,它是創(chuàng)建對(duì)象的模板。(√)

(2)C++語言只支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而不支持多態(tài)性。(×)【結(jié)果分析】

C++語言不僅支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性等特性,而且支持多態(tài)性。

(3)面向?qū)ο蟪绦蛟O(shè)計(jì)中的消息應(yīng)該包含“如何做”的信息。(×)【結(jié)果分析】

消息是面向?qū)ο蟪绦蛟O(shè)計(jì)用來描述對(duì)象之間通信的機(jī)制。向?qū)ο蟆鞍l(fā)送消息”只需告訴對(duì)象做什么,對(duì)象根據(jù)這個(gè)消息決定如何做。(4)一個(gè)消息只能產(chǎn)生特定的響應(yīng)效果。(×)【結(jié)果分析】

當(dāng)一個(gè)對(duì)象發(fā)出消息時(shí),由于接收對(duì)象的類型可能不同,所以,它們可能做出不同的反應(yīng)。這樣,一個(gè)消息可以產(chǎn)生不同的響應(yīng)效果,這種現(xiàn)象叫做多態(tài)。(5)類的設(shè)計(jì)和類的繼承機(jī)制實(shí)現(xiàn)了軟件模塊的可重用性。(√)(6)C++語言和Java語言均不是一個(gè)純正的面向?qū)ο蟮某绦蛟O(shè)計(jì)的語言。(×)【結(jié)果分析】

Java語言是一個(gè)純正的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。(7)學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)方法的唯一途徑。(×)【結(jié)果分析】

程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語言的一種技術(shù),學(xué)習(xí)C++語言是學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的重要途徑之一。

(8)在C++語言中,類是支持?jǐn)?shù)據(jù)封裝的工具。(√)

五、簡(jiǎn)答題

(1)什么是結(jié)構(gòu)化程序設(shè)計(jì)方法?它有哪些優(yōu)點(diǎn)和缺點(diǎn)? 【問題解答】

結(jié)構(gòu)化程序設(shè)計(jì)方法著眼于系統(tǒng)要實(shí)現(xiàn)的功能,從系統(tǒng)的輸入輸出出發(fā),分析系統(tǒng)要做哪些事情,進(jìn)而考慮如何做這些事情,自頂向下地對(duì)系統(tǒng)的功能進(jìn)行分解,來建立系統(tǒng)的功能結(jié)構(gòu)和相應(yīng)的程序模塊結(jié)構(gòu),有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)。隨著程序規(guī)模與復(fù)雜性的增長(zhǎng),這種面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法存在明顯的不足之處。首先是數(shù)據(jù)安全性問題。由于數(shù)據(jù)被每個(gè)模塊所共用,因此是不安全的,一旦出錯(cuò),很難查明原因。其次是可維護(hù)性及可重用性差。它把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨(dú)立的實(shí)體,一旦數(shù)據(jù)結(jié)構(gòu)需要改變時(shí),常常要涉及整個(gè)程序,修改工作量極大并容易產(chǎn)生新的錯(cuò)誤。每一種相對(duì)于老問題的新方法都要帶來額外的開銷。另外,圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難。

(2)什么是面向?qū)ο蟪绦蛟O(shè)計(jì)方法?它有哪些優(yōu)點(diǎn)? 【問題解答】

面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,將程序設(shè)計(jì)為一組相互協(xié)作的對(duì)象而不是一組相互協(xié)作的函數(shù)。在程序中,屬性用數(shù)據(jù)表示,用來描述對(duì)象靜態(tài)特征; 行為用程序代碼實(shí)現(xiàn),用來描述對(duì)象動(dòng)態(tài)特征。可見,在面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,對(duì)象是數(shù)據(jù)結(jié)構(gòu)和算法的封裝體。對(duì)象之間存在各種聯(lián)系,它們之間通過消息進(jìn)行通信。程序可表示為:

程序=對(duì)象+消息

在面向?qū)ο蟪绦蛟O(shè)計(jì)中應(yīng)著重于類的設(shè)計(jì)。類正是面向?qū)ο笳Z言的基本程序模塊,通過類的設(shè)計(jì)來完成實(shí)體的建模任務(wù)。類通過一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系。一個(gè)類中的操作不會(huì)處理到另一個(gè)類中的數(shù)據(jù),這樣程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。程序的執(zhí)行取決于事件發(fā)生的順序,由順序產(chǎn)生的消息來驅(qū)動(dòng)程序的執(zhí)行。不必預(yù)先確定消息產(chǎn)生的順序,更符合客觀世界的實(shí)際。并且面向?qū)ο蟪绦蛟O(shè)計(jì)方法提供了軟件重用、解決大問題和復(fù)雜問題的有效途徑,具有抽象性、封裝性、繼承性和多態(tài)性等特點(diǎn)。

(3)結(jié)構(gòu)化程序設(shè)計(jì)方法與面向?qū)ο蟪绦蛟O(shè)計(jì)方法在對(duì)待數(shù)據(jù)結(jié)構(gòu)和算法關(guān)系上有 什么不同? 【問題解答】

結(jié)構(gòu)化程序設(shè)計(jì)方法中,把數(shù)據(jù)結(jié)構(gòu)和算法分離為相互獨(dú)立的實(shí)體; 而在面向?qū)ο蟪绦蛟O(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)和算法封裝在一起,結(jié)合成一個(gè)獨(dú)立的單位,即對(duì)象,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。對(duì)象的私有屬性只能由這個(gè)對(duì)象的行為來讀取和修改,與外部的聯(lián)系通過公有行為充當(dāng)外部接口。第 2 章

從C到C++

面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解與課程設(shè)計(jì)指導(dǎo)

第2章 從C到 C++

一、名詞解釋

引用內(nèi)聯(lián)函數(shù)重載函數(shù) 【問題解答】

所謂引用就是給對(duì)象取一個(gè)別名,使用該別名可以存取該對(duì)象。換句話說是使新對(duì)象和原對(duì)象共用一個(gè)地址。

內(nèi)聯(lián)函數(shù)是使用inline關(guān)鍵字聲明的函數(shù)。

重載函數(shù)指在同一個(gè)作用域內(nèi)名字相同而參數(shù)不同的函數(shù)。重載函數(shù)通常用來對(duì)具有相似行為而數(shù)據(jù)類型或數(shù)據(jù)個(gè)數(shù)不同的操作提供—個(gè)通用的名稱。

二、填空題

(1)一般情況下,用C++語言編寫的程序是由函數(shù)加上類組成的。(2)C++有兩種注釋符號(hào),一種是//,另一種是 /*??*/。

(3)使用C++風(fēng)格的輸入輸出,在程序中必須包含頭文件“iostream”。(4)cin是預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象,>>是輸入操作符,也稱提取運(yùn)算符。(5)cout是預(yù)定義的標(biāo)準(zhǔn)輸出流對(duì)象,<<是輸出操作符,也稱插入運(yùn)算符。(6)指針的值是它所指向那個(gè)對(duì)象的地址值。指針的類型是它所指向?qū)ο蟮念愋汀V羔樀膬?nèi)容便是它所指向?qū)ο蟮闹怠?/p>

(7)C++使用運(yùn)算符&來定義一個(gè)引用,對(duì)引用的存取都是對(duì)它所引用的對(duì)象的存取。(8)當(dāng)一個(gè)函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前時(shí),必須先用函數(shù)原型對(duì)函數(shù)進(jìn)行聲明。

(9)C++有值傳遞和引用傳遞兩種參數(shù)傳遞機(jī)制。(10)使用關(guān)鍵字inline聲明的函數(shù)稱為內(nèi)聯(lián)函數(shù)。(11)運(yùn)算符new用于進(jìn)行動(dòng)態(tài)內(nèi)存分配,運(yùn)算符delete用于釋放動(dòng)態(tài)分配的內(nèi)存。

(12)下面程序的輸出結(jié)果為x=10,y=10;

x=100,y=100。

#include

using namespace std;

int main()

{

int x=10,&y=x;

cout<<“x=”<

int *p=&y;

*p=100;

cout<<“x=”<

return 0;

}

三、選擇題(至少選一個(gè),可以多選)

(1)在整型指針變量p2、p3的定義中,錯(cuò)誤的是(A)。A.int p1,*p2,p3;B.int*p2,p1,*p3;C.int p1,*p2=&p1,*p3;D.int*p2,p1,*p3=&p1;【結(jié)果分析】

指針定義的具體格式如下所示:

<類型> *<指針名1>,*<指針名2>,?;

(2)若有定義“double xx=3.14,*pp=&xx; ”,則*pp等價(jià)于(A.&xxB.*xxC.3.14D.xx 【結(jié)果分析】

pp指向xx所在的內(nèi)存單元,這樣*pp和xx等價(jià)。(3)下面對(duì)引用的描述中(C)是錯(cuò)誤的。A.引用是某個(gè)變量或?qū)ο蟮膭e名 B.建立引用時(shí),要對(duì)它初始化)。C C.對(duì)引用初始化可以使用任意類型的變量 D.引用與其代表的對(duì)象具有相同的地址 【結(jié)果分析】

所謂引用就是給對(duì)象取一個(gè)別名,使用該別名可以存取該對(duì)象,所以對(duì)引用初始化必須使用同類型的變量。

(4)函數(shù)沒有返回值的時(shí)候,應(yīng)該選擇(A)的函數(shù)類型。A.void B.int C.不確定 D.float(5)在函數(shù)的定義格式中,下面各組成部分中,(D)是可以省略的。A.函數(shù)名 B.函數(shù)體 C.返回值類型 D.函數(shù)參數(shù) 【結(jié)果分析】

函數(shù)的定義可以缺省形式參數(shù),此時(shí)稱為無參函數(shù)。

(6)對(duì)重載的函數(shù)來說,下面敘述不正確的是(D)。A.參數(shù)的類型不同 B.參數(shù)的順序不同 C.參數(shù)的個(gè)數(shù)不同

D.參數(shù)的個(gè)數(shù)、類型、順序都相同,但函數(shù)的返回值類型不同 【結(jié)果分析】

對(duì)重載的函數(shù)來說,編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個(gè)數(shù)來判斷使用哪一個(gè)函數(shù),所以重載函數(shù)參數(shù)的個(gè)數(shù)、類型、順序不能都相同。

(7)下列有關(guān)設(shè)置函數(shù)參數(shù)默認(rèn)值的描述中,(D)是正確的。A.對(duì)設(shè)置函數(shù)參數(shù)默認(rèn)值的順序沒有任何規(guī)定 B.函數(shù)具有一個(gè)參數(shù)時(shí)不能設(shè)置默認(rèn)值

C.默認(rèn)參數(shù)要設(shè)置在函數(shù)的原型中,而不能設(shè)置在函數(shù)的定義語句中 D.設(shè)置默認(rèn)參數(shù)可使用表達(dá)式,但表達(dá)式中不可用局部變量 【結(jié)果分析】

在C++中,在函數(shù)原型中可以為一個(gè)或多個(gè)參數(shù)指定默認(rèn)值。對(duì)函數(shù)參數(shù)設(shè)置默認(rèn)值要注意以下幾點(diǎn)。◆若沒有聲明函數(shù)原型,參數(shù)的默認(rèn)值可在函數(shù)定義的頭部進(jìn)行設(shè)置,否則必須在函數(shù)原型中進(jìn)行設(shè)置。

◆在一個(gè)指定了默認(rèn)值的參數(shù)右邊不能出現(xiàn)沒有指定默認(rèn)值的參數(shù)。◆設(shè)置默認(rèn)參數(shù)可使用表達(dá)式,但表達(dá)式中不可用局部變量。(8)下面說法正確的是(BC)。A.所有的函數(shù)都可以說明為內(nèi)聯(lián)函數(shù)

B.具有循環(huán)語句、switch語句的函數(shù)不能說明為內(nèi)聯(lián)函數(shù)

C.使用內(nèi)聯(lián)函數(shù),可以加快程序執(zhí)行的速度,但會(huì)增加程序代碼的大小 D.使用內(nèi)聯(lián)函數(shù),可以減小程序代碼大小,但使程序執(zhí)行的速度減慢 【結(jié)果分析】

內(nèi)聯(lián)函數(shù)主要是解決程序的運(yùn)行效率問題。在程序編譯時(shí),編譯系統(tǒng)將程序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進(jìn)行替換,進(jìn)而減少了程序運(yùn)行的時(shí)間,但會(huì)增加程序代碼的大小。它是以空間換取時(shí)間,因此內(nèi)聯(lián)函數(shù)適用于功能不太復(fù)雜,但要求被頻繁調(diào)用的函數(shù)。

(9)一個(gè)函數(shù)功能不太復(fù)雜,但要求被頻繁調(diào)用,應(yīng)選用(A)。A.內(nèi)聯(lián)函數(shù) B.重載函數(shù) C.遞歸函數(shù) D.嵌套函數(shù)(10)C++對(duì)C語言做了很多改進(jìn),下列描述中使得C語言發(fā)生了質(zhì)變,即從面向過程變成面向?qū)ο蟮氖牵―)。A.增加了一些新的運(yùn)算符

B.允許函數(shù)重載,并允許設(shè)置默認(rèn)參數(shù) C.規(guī)定函數(shù)說明必須用原型 D.引進(jìn)了類和對(duì)象的概念 【結(jié)果分析】

面向?qū)ο?對(duì)象+類+繼承+消息+多態(tài)

四、判斷題

(1)C++程序中,不得使用沒有定義或說明的變量。(√)(2)使用const說明常量時(shí),可以不必指出類型。(×)【結(jié)果分析】

如果用const 定義的是一個(gè)整型常量,則類型說明符int可以省略。(3)引用被創(chuàng)建時(shí)可以用任意變量進(jìn)行初始化。(×)【結(jié)果分析】

對(duì)引用初始化必須使用同類型的變量。

(4)一個(gè)返回引用的調(diào)用函數(shù)可以作為左值。(√)(5)函數(shù)可以沒有參數(shù),也可以沒有返回值。(√)(6)沒有參數(shù)的兩個(gè)函數(shù)是不能重載的。(√)(7)函數(shù)可設(shè)置默認(rèn)參數(shù),但不允許將一個(gè)函數(shù)的所有參數(shù)都設(shè)置為默認(rèn)參數(shù)。(×)

【結(jié)果分析】

函數(shù)可設(shè)置默認(rèn)參數(shù),且允許將一個(gè)函數(shù)的所有參數(shù)都設(shè)置為默認(rèn)參數(shù)。(8)運(yùn)算符new分配的空間由運(yùn)算符delete釋放。(√)

五、簡(jiǎn)答題

(1)名字空間的用途是什么? 【問題解答】

名字空間用來防止命名的沖突。(2)引用有何用處? 【問題解答】

除了獨(dú)立引用外,在C++程序中,引用的主要用途是用作函數(shù)參數(shù)和函數(shù)的返回值。

(3)比較值調(diào)用和引用調(diào)用的相同點(diǎn)與不同點(diǎn)。【問題解答】 在值調(diào)用機(jī)制中,作為實(shí)參的表達(dá)式的值被復(fù)制到由對(duì)應(yīng)的形參名所標(biāo)識(shí)的一個(gè)對(duì)象中,作為形參的初始值。函數(shù)體對(duì)形參的訪問、修改都是在這個(gè)標(biāo)識(shí)對(duì)象上操作的,與實(shí)參無關(guān),即數(shù)據(jù)的傳遞是單向的。

使用引用作函數(shù)的形參時(shí),調(diào)用函數(shù)的實(shí)參要用變量名。實(shí)參傳遞給形參,相當(dāng)于在被調(diào)用函數(shù)中使用了實(shí)參的別名。于是,在被調(diào)用函數(shù)中對(duì)形參的操作實(shí)質(zhì)是對(duì)實(shí)參的直接操作,即數(shù)據(jù)的傳遞是雙向的。(4)內(nèi)聯(lián)函數(shù)有什么作用?它有哪些特點(diǎn)? 【問題解答】

內(nèi)聯(lián)函數(shù)是使用inline關(guān)鍵字聲明的函數(shù)。在程序編譯時(shí),編譯系統(tǒng)將程序中出現(xiàn)內(nèi)聯(lián)函數(shù)調(diào)用的地方用函數(shù)體進(jìn)行替換,進(jìn)而減少了程序運(yùn)行的時(shí)間。使用內(nèi)聯(lián)函數(shù)應(yīng)注意以下幾點(diǎn)。◆遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。

◆內(nèi)聯(lián)函數(shù)一般適合于不含有switch和while等復(fù)雜的結(jié)構(gòu)且只有1~5條語句的小函數(shù),否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。

◆內(nèi)聯(lián)函數(shù)只能先定義后使用,否則編譯系統(tǒng)也將該函數(shù)視為普通函數(shù)。◆對(duì)內(nèi)聯(lián)函數(shù)也不能進(jìn)行異常接口聲明。(5)函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎?

【問題解答】

不必一致。所有的參數(shù)是根據(jù)位置和類型而不是名字來區(qū)分的。(6)重載函數(shù)時(shí)通過什么來區(qū)分? 【問題解答】

編譯系統(tǒng)將根據(jù)函數(shù)參數(shù)的類型和個(gè)數(shù)來判斷使用哪一個(gè)函數(shù)。

六、程序分析題(寫出程序的輸出結(jié)果,并分析結(jié)果)

#include

using namespace std;

int main()

{

int num=50;

int& ref=num;

ref=ref+10;

cout<<“num=”<

num=num+40;

cout<<“ref=”<

return 0;}

【輸出結(jié)果】

num=60

ref=100

【問題分析】

本題主要考查引用的含義。【結(jié)果分析】

程序首先定義一個(gè)int類型的對(duì)象num,并給它賦初始值50。然后又定義了一個(gè)int類型的引用ref,并將它和num相聯(lián)系。這樣,無論是對(duì)num還是對(duì)ref進(jìn)行操作,實(shí)際上都是對(duì)那個(gè)一開始放著50的物理單元的內(nèi)容進(jìn)行操作。

七、程序設(shè)計(jì)題

寫出一個(gè)完整的C++程序,使用系統(tǒng)函數(shù)pow(x,y)計(jì)算xy的值,注意包含頭文件cmath。【問題分析】

本題主要考查簡(jiǎn)單的輸入輸出和標(biāo)準(zhǔn)庫函數(shù)的調(diào)用方法。【解題思路】

① 由于要用到系統(tǒng)函數(shù)pow(x,y),所以要包含頭文件cmath。

② 要計(jì)算xy的值,首先必須知道x和y的值。為了程序的通用性,最好通過交互的方式輸入x和y的值。【參考程序】

// xt2_1.cpp

#include

#include

using namespace std;

int main()

{

float x,y;

cout<<“please input 2 floats to x,y:”;

cin>>x>>y;

float z=pow(x,y);

cout<<“pow(”<

return 0;} 【輸出結(jié)果】

please input 2 floats to x,y:3.1 2

pow(3.1,2)=9.61

第 3 章

類與對(duì)象

面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解與課程設(shè)計(jì)指導(dǎo)

第3章

類 與 對(duì) 象

一、填空題(1)類定義中關(guān)鍵字private、public和protected以后的成員的訪問權(quán)限分別是私有、公有和保護(hù)。如果沒有使用關(guān)鍵字,則所有成員默認(rèn)定義為private權(quán)限。具有public訪問權(quán)限的數(shù)據(jù)成員才能被不屬于該類的函數(shù)所直接訪問。(2)定義成員函數(shù)時(shí),運(yùn)算符“∷”是作用域運(yùn)算符,“MyClass∷”用于表明其后的成員函數(shù)是在“MyClass類”中說明的。

(3)在程序運(yùn)行時(shí),通過為對(duì)象分配內(nèi)存來創(chuàng)建對(duì)象。在創(chuàng)建對(duì)象時(shí),使用類作為樣板,故稱對(duì)象為類的實(shí)例。

(4)假定Dc是一個(gè)類,則執(zhí)行“Dc a[10],b(2)”語句時(shí),系統(tǒng)自動(dòng)調(diào)用該類構(gòu)造函數(shù)的次數(shù)為11。【結(jié)果分析】

創(chuàng)建10個(gè)數(shù)組元素需調(diào)用構(gòu)造函數(shù)10次,創(chuàng)建對(duì)象b需調(diào)用構(gòu)造函數(shù)1次,所以系統(tǒng)自動(dòng)調(diào)用該類構(gòu)造函數(shù)的總次數(shù)為11。

(5)對(duì)于任意一個(gè)類,析構(gòu)函數(shù)的個(gè)數(shù)最多為1個(gè)。

(6)delete運(yùn)算符通常用于實(shí)現(xiàn)釋放該類對(duì)象中指針成員所指向的動(dòng)態(tài)存儲(chǔ)空間的任務(wù)。(7)C++程序的內(nèi)存格局通常分為4個(gè)區(qū): 數(shù)據(jù)區(qū)、代碼區(qū)、棧區(qū)和堆區(qū)。(8)數(shù)據(jù)定義為全局變量,破壞了數(shù)據(jù)的 封裝性; 較好的解決辦法是將所要共享的數(shù)據(jù)定義為類的 靜態(tài)成員。

(9)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)可由 任意訪問權(quán)限許可的函數(shù)訪問。(10)友元函數(shù)和 友元類統(tǒng)稱為友元。(11)友元的正確使用能提高程序的效率,但破壞了類的封裝性和數(shù)據(jù)的隱蔽性。(12)若需要把一個(gè)類A定義為一個(gè)類B的友元類,則應(yīng)在類B的定義中加入一條語句: friend class A。

二、選擇題(至少選一個(gè),可以多選)(1)以下不屬于類訪問權(quán)限的是(B)。A.public B.staticC.protectedD.private 【結(jié)果分析】

類的訪問權(quán)限有public、protected 和private。(2)有關(guān)類的說法不正確的是(BC)。A.類是一種用戶自定義的數(shù)據(jù)類型

B.只有類的成員函數(shù)才能訪問類的私有數(shù)據(jù)成員

C.在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是公有的 D.在類中,如不做權(quán)限說明,所有的數(shù)據(jù)成員都是私有的 【結(jié)果分析】

類是一種用戶自定義的數(shù)據(jù)類型,類中成員均具有一種訪問權(quán)限。關(guān)鍵字public、protected 和private以后的成員的訪問權(quán)限分別是公有、保護(hù)和私有的,所有成員默認(rèn)定義為private的。

私有成員是被隱藏的數(shù)據(jù),只有該類的成員函數(shù)或友元函數(shù)才可以訪問它。(3)在類定義的外部,可以被任意函數(shù)訪問的成員有(C)。A.所有類成員 B.private或protected的類成員 C.public的類成員 D.public或private的類成員 【結(jié)果分析】

類是一種用戶自定義的數(shù)據(jù)類型,類中成員均具有一種訪問權(quán)限。公有成員定義了類的外部接口。私有成員是被隱藏的數(shù)據(jù),只有該類的成員函數(shù)或友元函數(shù)才可以引用它。保護(hù)成員具有公有成員和私有成員的雙重性質(zhì),可以被該類或派生類的成員函數(shù)或友元函數(shù)引用。可見在類定義的外部,可以被任意函數(shù)訪問的成員是public的類成員。

(4)關(guān)于類和對(duì)象的說法(C)是錯(cuò)誤的。A.對(duì)象是類的一個(gè)實(shí)例

B.任何一個(gè)對(duì)象只能屬于一個(gè)具體的類 C.一個(gè)類只能有一個(gè)對(duì)象

D.類與對(duì)象的關(guān)系和數(shù)據(jù)類型與變量的關(guān)系相似 【結(jié)果分析】

C++語言的類就是一種用戶自己定義的數(shù)據(jù)類型,類和對(duì)象的關(guān)系就相當(dāng)于基本數(shù)據(jù)類型與它的變量的關(guān)系,所以任何一個(gè)對(duì)象只能屬于一個(gè)具體的類,但一個(gè)類可以有多個(gè)對(duì)象。(5)設(shè)MClass是一個(gè)類,dd是它的一個(gè)對(duì)象,pp是指向dd的指針,cc是dd的引用,則對(duì)成員的訪問,對(duì)象dd可以通過(B)進(jìn)行,指針pp可以通過(D)進(jìn)行,引用cc可以通過(B)進(jìn)行。

A.∷ B..C.& D.->(6)關(guān)于成員函數(shù)的說法中不正確的是(C)。A.成員函數(shù)可以無返回值 B.成員函數(shù)可以重載 C.成員函數(shù)一定是內(nèi)聯(lián)函數(shù)

D.成員函數(shù)可以設(shè)定參數(shù)的默認(rèn)值 【結(jié)果分析】

與普通函數(shù)不同的是,成員函數(shù)是屬于某個(gè)類的。成員函數(shù)的實(shí)現(xiàn),可以放在類體內(nèi),也可以放在類體外。在類體外實(shí)現(xiàn)的成員函數(shù)不再是內(nèi)聯(lián)函數(shù)。(7)下面對(duì)構(gòu)造函數(shù)的不正確描述是(B)。A.系統(tǒng)可以提供默認(rèn)的構(gòu)造函數(shù)

B.構(gòu)造函數(shù)可以有參數(shù),所以也可以有返回值 C.構(gòu)造函數(shù)可以重載

D.構(gòu)造函數(shù)可以設(shè)置默認(rèn)參數(shù) 【結(jié)果分析】

構(gòu)造函數(shù)不能指定返回類型,即使是void類型也不可以,當(dāng)然不可能有返回值。(8)假定A是一個(gè)類,那么執(zhí)行語句“A a,b(3),*p; ”調(diào)用了(B)次構(gòu)造函數(shù)。

A.1 B.2 C.3 D.4 【結(jié)果分析】

聲明指針是不會(huì)調(diào)用構(gòu)造函數(shù)的。

(9)下面對(duì)析構(gòu)函數(shù)的正確描述是(AC)。A.系統(tǒng)可以提供默認(rèn)的析構(gòu)函數(shù) B.析構(gòu)函數(shù)必須由用戶定義 C.析構(gòu)函數(shù)沒有參數(shù)

D.析構(gòu)函數(shù)可以設(shè)置默認(rèn)參數(shù) 【結(jié)果分析】

析構(gòu)函數(shù)的作用是在對(duì)象消失時(shí)執(zhí)行一項(xiàng)清理任務(wù)。如果一個(gè)類中沒有定義析構(gòu)函數(shù),系統(tǒng)將自動(dòng)生成一個(gè)默認(rèn)析構(gòu)函數(shù)。析構(gòu)函數(shù)沒有參數(shù),當(dāng)然不可能設(shè)置默認(rèn)參數(shù)。

(10)類的析構(gòu)函數(shù)是(D)時(shí)被調(diào)用的。

A.類創(chuàng)建 B.創(chuàng)建對(duì)象 C.引用對(duì)象 D.釋放對(duì)象

(11)創(chuàng)建一個(gè)類的對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用(B); 撤銷對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用(C)。

A.成員函數(shù) B.構(gòu)造函數(shù) C.析構(gòu)函數(shù) D.復(fù)制構(gòu)造函數(shù)(12)通常拷貝構(gòu)造函數(shù)的參數(shù)是(C)。

A.某個(gè)對(duì)象名 B.某個(gè)對(duì)象的成員名 C.某個(gè)對(duì)象的引用名 D.某個(gè)對(duì)象的指針名(13)關(guān)于this指針的說法正確的是(B)。

A.this指針必須顯式說明B.當(dāng)創(chuàng)建一個(gè)對(duì)象后,this指針就指向該對(duì)象 C.成員函數(shù)擁有this指針D.靜態(tài)成員函數(shù)擁有this指針。【結(jié)果分析】

this指針是由C++編譯器自動(dòng)產(chǎn)生且較常用的一個(gè)隱含對(duì)象指針,它不能被顯式聲明。當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),this指針就初始化指向該對(duì)象。但只有非靜態(tài)成員函數(shù)才擁有this指針,并通過該指針來處理對(duì)象。(14)下列關(guān)于子對(duì)象的描述中,(B)是錯(cuò)誤的。A.子對(duì)象是類的一種數(shù)據(jù)成員,它是另一個(gè)類的對(duì)象 B.子對(duì)象可以是自身類的對(duì)象

C.對(duì)子對(duì)象的初始化要包含在該類的構(gòu)造函數(shù)中 D.一個(gè)類中能含有多個(gè)子對(duì)象作其成員 【結(jié)果分析】

子對(duì)象不可以是自身類的對(duì)象。

(15)對(duì)new運(yùn)算符的下列描述中,(B)是錯(cuò)誤的。A.它可以動(dòng)態(tài)創(chuàng)建對(duì)象和對(duì)象數(shù)組 B.用它創(chuàng)建對(duì)象數(shù)組時(shí)必須指定初始值 C.用它創(chuàng)建對(duì)象時(shí)要調(diào)用構(gòu)造函數(shù)

D.用它創(chuàng)建的對(duì)象數(shù)組可以使用運(yùn)算符delete來一次釋放 【結(jié)果分析】

使用運(yùn)算符new創(chuàng)建對(duì)象數(shù)組的格式如下:

new <類型說明符> [<算術(shù)表達(dá)式>]

其中,<算術(shù)表達(dá)式>給出數(shù)組的大小,后面不能再跟構(gòu)造函數(shù)參數(shù),所以用它創(chuàng)建對(duì)象數(shù)組時(shí)不能指定初始值。

(16)對(duì)delete運(yùn)算符的下列描述中,(D)是錯(cuò)誤的。A.用它可以釋放用new運(yùn)算符創(chuàng)建的對(duì)象和對(duì)象數(shù)組

B.用它釋放一個(gè)對(duì)象時(shí),它作用于一個(gè)new所返回的指針

C.用它釋放一個(gè)對(duì)象數(shù)組時(shí),它作用的指針名前須加下標(biāo)運(yùn)算符[ ] D.用它可一次釋放用new運(yùn)算符創(chuàng)建的多個(gè)對(duì)象 【結(jié)果分析】

用delete一次只能釋放用new創(chuàng)建的1個(gè)對(duì)象,但可釋放一個(gè)對(duì)象數(shù)組。(17)關(guān)于靜態(tài)數(shù)據(jù)成員,下面敘述不正確的是(C)。A.使用靜態(tài)數(shù)據(jù)成員,實(shí)際上是為了消除全局變量

B.可以使用“對(duì)象名.靜態(tài)成員”或者“類名∷靜態(tài)成員”來訪問靜態(tài)數(shù)據(jù)成員

C.靜態(tài)數(shù)據(jù)成員只能在靜態(tài)成員函數(shù)中引用 D.所有對(duì)象的靜態(tài)數(shù)據(jù)成員占用同一內(nèi)存單元 【結(jié)果分析】

靜態(tài)數(shù)據(jù)成員可以在靜態(tài)成員函數(shù)中引用,也可以在非靜態(tài)成員函數(shù)中引用。(18)對(duì)靜態(tài)數(shù)據(jù)成員的不正確描述是(CD)。A.靜態(tài)成員不屬于對(duì)象,是類的共享成員 B.靜態(tài)數(shù)據(jù)成員要在類外定義和初始化

C.調(diào)用靜態(tài)成員函數(shù)時(shí)要通過類或?qū)ο蠹せ睿造o態(tài)成員函數(shù)擁有this指針 D.只有靜態(tài)成員函數(shù)可以操作靜態(tài)數(shù)據(jù)成員 【結(jié)果分析】 this指針是一個(gè)局部量,局部于某個(gè)對(duì)象,而靜態(tài)成員函數(shù)是屬于整個(gè)類而不是某個(gè)對(duì)象,它沒有this指針。靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)均可操作靜態(tài)數(shù)據(jù)成員。

(19)下面的選項(xiàng)中,靜態(tài)成員函數(shù)不能直接訪問的是(D)。A.靜態(tài)數(shù)據(jù)成員 B.靜態(tài)成員函數(shù) C.類以外的函數(shù)和數(shù)據(jù) D.非靜態(tài)數(shù)據(jù)成員 【結(jié)果分析】

由于靜態(tài)成員函數(shù)沒有this指針,它只能直接訪問該類的靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)和類以外的函數(shù)和數(shù)據(jù),訪問類中的非靜態(tài)數(shù)據(jù)成員必須通過參數(shù)傳遞方式得到對(duì)象名,然后通過對(duì)象名來訪問。

(20)在類的定義中,引入友元的原因是(A)。

A.提高效率 B.深化使用類的封裝性 C.提高程序的可讀性 D.提高數(shù)據(jù)的隱蔽性 【結(jié)果分析】

友元的作用主要是為了提高效率和方便編程,但友元破壞了類的封裝性和隱蔽性,使用時(shí)要權(quán)衡利弊。

(21)友元類的聲明方法是(A)。

A.friend class<類名>; B.youyuan class<類名>; C.class friend<類名>; D.friends class<類名>;(22)下面對(duì)友元的錯(cuò)誤描述是(D)。A.關(guān)鍵字friend用于聲明友元

B.一個(gè)類中的成員函數(shù)可以是另一個(gè)類的友元 C.友元函數(shù)訪問對(duì)象的成員不受訪問特性影響 D.友元函數(shù)通過this指針訪問對(duì)象成員 【結(jié)果分析】

友元函數(shù)是一個(gè)放在類中的普通函數(shù),它沒有this指針。(23)下面選項(xiàng)中,(C)不是類的成員函數(shù)。

A.構(gòu)造函數(shù) B.析構(gòu)函數(shù) C.友元函數(shù) D.拷貝構(gòu)造函數(shù)

三、簡(jiǎn)答題

(1)類與對(duì)象有什么關(guān)系? 【問題解答】

類是一種用戶自己定義的數(shù)據(jù)類型,和其他數(shù)據(jù)類型不同的是,組成這種類型的不僅可以有數(shù)據(jù),而且可以有對(duì)數(shù)據(jù)進(jìn)行操作的函數(shù)。程序員可以使用這個(gè)新類型在程序中聲明新的變量,具有類類型的變量稱為對(duì)象。創(chuàng)建對(duì)象時(shí),類被用做樣板,對(duì)象稱為類的實(shí)例。

(2)類定義的一般形式是什么?其成員有哪幾種訪問權(quán)限? 【問題解答】

定義類一般形式為:

class類名{

public:

<公有數(shù)據(jù)和函數(shù)>

protected:

<保護(hù)數(shù)據(jù)和函數(shù)>

private:

<私有數(shù)據(jù)和函數(shù)> };

訪問權(quán)限共有3種: 分別是公有(public)、保護(hù)(protected)和私有(private)。(3)類的實(shí)例化是指創(chuàng)建類的對(duì)象還是定義類? 【問題解答】

指創(chuàng)建類的對(duì)象。

(4)什么是this指針?它的主要作用是什么? 【問題解答】

this指針是C++語言為成員函數(shù)提供的一個(gè)隱含對(duì)象指針,它不能被顯式聲明。this指針是一個(gè)局部量,局部于某個(gè)對(duì)象。不同的對(duì)象調(diào)用同一個(gè)成員函數(shù)時(shí),編譯器根據(jù)this指針來確定應(yīng)該引用哪一個(gè)對(duì)象的數(shù)據(jù)成員。(5)什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用? 【問題解答】

拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它的作用是用一個(gè)已經(jīng)存在的對(duì)象去初始化另一個(gè)對(duì)象。為了保證所引用的對(duì)象不被修改,通常把引用參數(shù)聲明為const參數(shù)。

在以下3種情況下,拷貝構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用: ◆當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí); ◆當(dāng)函數(shù)的形參是類的對(duì)象,進(jìn)行形參和實(shí)參結(jié)合時(shí);

◆當(dāng)函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行完成返回調(diào)用者時(shí)。

四、程序分析題(寫出程序的輸出結(jié)果,并分析結(jié)果)(1)

#include

using namespace std;

class Test {

private:

int num;public:

Test();// 默認(rèn)構(gòu)造函數(shù)

Test(int n);// 帶一個(gè)參數(shù)構(gòu)造函數(shù)

};

Test∷Test()

{

cout<<“Init defa”<

num=0;}

Test∷Test(int n)

{

cout<<“Init”<<“ ”<

num=n;}

int main()

{

Test x[2];// 語句1

Test y(15);// 語句2

return 0;}

【輸出結(jié)果】

Init defa Init defa

Init 15

【問題分析】

本題主要考查構(gòu)造函數(shù)的調(diào)用時(shí)機(jī)和構(gòu)造函數(shù)的匹配問題。【要點(diǎn)提示】

構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用,具體調(diào)用哪個(gè)構(gòu)造函數(shù)將由編譯系統(tǒng)根據(jù)重載函數(shù)的匹配原則來確定。【結(jié)果分析】

① 程序聲明了2個(gè)對(duì)象x和y,類中有2個(gè)構(gòu)造函數(shù)。

② 程序首先執(zhí)行語句1,創(chuàng)建對(duì)象x,調(diào)用默認(rèn)構(gòu)造函數(shù)。由于對(duì)象x是對(duì)象數(shù)組,每個(gè)數(shù)組元素被創(chuàng)建時(shí)都要調(diào)用構(gòu)造函數(shù),所以默認(rèn)構(gòu)造函數(shù)被調(diào)用了2次,輸出第1、2行結(jié)果。程序接著執(zhí)行語句2,創(chuàng)建對(duì)象y,調(diào)用帶一個(gè)參數(shù)的構(gòu)造函數(shù),輸出第3行結(jié)果。(2)

#include

using namespace std;

class Xx {

private:

int num;

public:

Xx(int x){num=x;} // 構(gòu)造函數(shù)

~Xx(){cout<<“dst ”<

};

int main()

{

Xx w(5);// 語句1

cout<<“Exit main”<

return 0;}

【輸出結(jié)果】

Exit main

dst 5

【問題分析】

本題主要考查析構(gòu)函數(shù)的調(diào)用時(shí)機(jī)。【要點(diǎn)提示】

析構(gòu)函數(shù)在釋放對(duì)象時(shí)被自動(dòng)調(diào)用。【結(jié)果分析】

① 程序聲明了一個(gè)對(duì)象w。

② 程序首先執(zhí)行語句1,創(chuàng)建對(duì)象w,調(diào)用構(gòu)造函數(shù),num得到初值5。程序接著執(zhí)行語句2,輸出第1行結(jié)果。當(dāng)程序結(jié)束時(shí),釋放對(duì)象w,析構(gòu)函數(shù)被調(diào)用,輸出第2行結(jié)果。

(3)將例3.10中的Whole類如下修改,其他部分不變,寫出輸出結(jié)果。

class Whole {

public:

Whole(int i);// Whole的有參構(gòu)造函數(shù)

Whole(){};// Whole的無參構(gòu)造函數(shù)

~Whole();// Whole的析構(gòu)函數(shù)

private:

Part p1;// 子對(duì)象1

Part p2;// 子對(duì)象2

Part p3;// 子對(duì)象3 };Whole∷Whole(int i):p2(i),p1()

{

cout<<“Constructor of Whole”<

Whole∷~Whole()

{

cout<<“Destructor of Whole”<

【輸出結(jié)果】

Default constructor of Part

Constructor of Part,3

Default constructor of Part

Constructor of Whole

Destructor of Whole

Destructor of Part,0

Destructor of Part,3

Destructor of Part,0

【問題分析】

本題主要考查子對(duì)象初始化的方法和含有子對(duì)象時(shí)構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。

【要點(diǎn)提示】

◆當(dāng)建立X類的對(duì)象時(shí),先調(diào)用子對(duì)象的構(gòu)造函數(shù),初始化子對(duì)象,然后才執(zhí)行X類的構(gòu)造函數(shù),初始化X類中的其他成員。

◆對(duì)子對(duì)象構(gòu)造函數(shù)的調(diào)用順序取決于這些子對(duì)象在類中的說明順序,與它們?cè)诔蓡T初始化列表中給出的順序無關(guān)。

◆如果X類的構(gòu)造函數(shù)沒有給出成員初始化列表,表明子對(duì)象將使用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。◆析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序正好相反。【結(jié)果分析】

程序的Whole類中出現(xiàn)了類Part的3個(gè)對(duì)象p1、p2和p3,作為該類的數(shù)據(jù)成員,則p1、p2和p3被稱為子對(duì)象。當(dāng)建立Whole類的對(duì)象w時(shí),子對(duì)象p1、p2和p3被建立,相應(yīng)的構(gòu)造函數(shù)被執(zhí)行。由于p1在Whole類中先說明,所以先執(zhí)行它所使用的構(gòu)造函數(shù),即類Part的默認(rèn)構(gòu)造函數(shù),接著p2執(zhí)行它所使用的有參構(gòu)造函數(shù),緊接著初始化p3,由于Whole類構(gòu)造函數(shù)的成員初始化列表中沒有子對(duì)象p3進(jìn)行初始化的選項(xiàng),所以執(zhí)行類Part的默認(rèn)構(gòu)造函數(shù),當(dāng)所有子對(duì)象被構(gòu)造完之后,對(duì)象w的構(gòu)造函數(shù)才被執(zhí)行,從而得到前4行輸出結(jié)果,而后4行是執(zhí)行相應(yīng)析構(gòu)函數(shù)的輸出結(jié)果。(4)

#include

using namespace std;

class Book {

public:

Book(int w);

static int sumnum;

private:

int num;};

Book∷Book(int w)

{

num=w;

sumnum-=w;}

int Book∷sumnum=120;// 語句1 int main()

{

Book b1(20);// 語句2

Book b2(70);// 語句3

cout<

return 0;}

【輸出結(jié)果】

【問題分析】

本題主要考查“在類的范圍內(nèi)所有對(duì)象共享靜態(tài)成員的數(shù)據(jù)”的含義。【結(jié)果分析】

程序中語句1對(duì)靜態(tài)成員sumnum進(jìn)行初始化,sumnum得到初值120。執(zhí)行語句2時(shí),調(diào)用構(gòu)造函數(shù),sumnum變?yōu)?00。接著語句3,再調(diào)用構(gòu)造函數(shù),sumnum變?yōu)?0。

五、程序設(shè)計(jì)題

(1)聲明一個(gè)Circle類,有數(shù)據(jù)成員radius(半徑)、成員函數(shù)area(),計(jì)算圓的面積,構(gòu)造一個(gè)Circle的對(duì)象進(jìn)行測(cè)試。【問題分析】

本題主要考查類定義的形式、對(duì)象成員訪問和對(duì)象初始化的方法。要求理解類和構(gòu)造函數(shù)的真正含義,特別注意如何將客觀事物的屬性和行為抽象為類的成員。【解題思路】

① 題目中已給出了類的基本部分,需要增加一個(gè)構(gòu)造函數(shù)來初始化數(shù)據(jù)成員radius。

② 為了程序的通用性,圓的半徑由鍵盤輸入。【參考程序】

// xt3_1.cpp

#include

第五篇:C++面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)大綱

《面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)》教學(xué)大綱

課程編號(hào):

課程中文名稱:面向?qū)ο蟪绦蛟O(shè)計(jì)

課程英文名稱:Object-Oriented Programming 總學(xué)時(shí): 40

實(shí)驗(yàn)學(xué)時(shí): 0

上機(jī)學(xué)時(shí):學(xué)分:

2.5 適用專業(yè):軟件工程專業(yè)

一、課程性質(zhì)、目的和任務(wù)(300字內(nèi))

《面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)》是計(jì)算機(jī)軟件工程專業(yè)本科生的一門專業(yè)基礎(chǔ)課。面向?qū)ο筌浖_發(fā)方法是吸收了軟件工程領(lǐng)域有益的概念和有效的方法而發(fā)展起來的一種軟件開發(fā)方法。它集抽象性、封裝性、繼承性和多態(tài)性于一體,可以幫助人們開發(fā)出模塊化的程序,并體現(xiàn)信息隱蔽、可復(fù)用、易修改、易擴(kuò)充等特性。本課程主要介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的方法和C++語言的基本概念及C++語言中的面向?qū)ο髾C(jī)制。通過本課程的學(xué)習(xí),應(yīng)使學(xué)生能夠較好地理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)的基本概念,掌握面向?qū)ο蟪绦虻脑O(shè)計(jì)方法,并能夠在C++環(huán)境下(如VC++)開發(fā)較大型的應(yīng)用程序。從而為以后的工作和學(xué)習(xí)打下基礎(chǔ)。

二、課程教學(xué)內(nèi)容及學(xué)時(shí)分配

第一章、面向?qū)ο蟪绦蛟O(shè)計(jì)概述(3學(xué)時(shí))

1.教學(xué)內(nèi)容

1.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法的產(chǎn)生和發(fā)展

1.2面向過程和面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本術(shù)語 1.4 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征 1.5面向?qū)ο蟪绦蛟O(shè)計(jì)語言

1.6基于Visual Studio 2010的C++應(yīng)用程序的開發(fā) 2.基本要求

了解面向?qū)ο蠹夹g(shù)的發(fā)展歷程;了解面向過程和面向?qū)ο蟪绦蛟O(shè)計(jì)兩種程序設(shè)計(jì)方法 優(yōu)缺點(diǎn);掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn);掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)術(shù)語和基本特征;了解目前常用的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。了解Visual Studio環(huán)境下,C++應(yīng)用程序的開發(fā)過程。3.重點(diǎn)、難點(diǎn)

重點(diǎn):面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)(數(shù)據(jù)的抽象與封裝、繼承性、多態(tài)性)及面向?qū)ο蟮幕拘g(shù)語;C++應(yīng)用程序的開發(fā)環(huán)境。

難點(diǎn):面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)(數(shù)據(jù)的抽象與封裝、繼承性、多態(tài)性)和面向?qū)ο蟮幕拘g(shù)語。

第二章、C++基礎(chǔ)(6學(xué)時(shí))

1.教學(xué)內(nèi)容

2.1C++程序的組成部分 2.2 命名空間

2.3 C++數(shù)據(jù)的輸入輸出 2.4引用 2.5函數(shù)

2.6 變量的的作用域與可見性 2.7對(duì)象的生存期 2.8 const常量

2.9動(dòng)態(tài)內(nèi)存分配和釋放 2.10編譯預(yù)處理

2.11文件的輸入和輸出 2.基本要求

了解C++程序的組成部分;掌握命名空間、變量的的作用域與可見性及生存期的概念;掌握引用及函數(shù)的引用參數(shù)和返回引用的概念和使用;掌握帶有默認(rèn)參數(shù)的函數(shù)的使用;掌握內(nèi)聯(lián)函數(shù)和重載函數(shù)的使用;掌握動(dòng)態(tài)內(nèi)存分配和釋放的方法;掌握磁盤文件的輸入輸出操作方法。3.重點(diǎn)、難點(diǎn)

重點(diǎn):引用及函數(shù)的引用參數(shù)和返回引用的概念和使用;動(dòng)態(tài)內(nèi)存分配和釋放的方法;默認(rèn)參數(shù)的函數(shù)的使用;內(nèi)聯(lián)函數(shù)和重載函數(shù)的使用。

難點(diǎn):函數(shù)的引用參數(shù)和返回引用的使用;掌握磁盤文件的輸入輸出操作方法。

第三章 類和對(duì)象(6學(xué)時(shí))

1.教學(xué)內(nèi)容

3.1類和對(duì)象的概念 3.2類的定義

3.3對(duì)象的創(chuàng)建與使用

3.4構(gòu)造函數(shù) 3.5析構(gòu)函數(shù)

3.6構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序 3.7 對(duì)象數(shù)組與對(duì)象指針 3.8向函數(shù)傳遞對(duì)象 3.9對(duì)象的賦值和復(fù)制 3.10類的組合 2.基本要求

理解類的概念,掌握類的定義方法;理解對(duì)象與類的關(guān)系,掌握對(duì)象的創(chuàng)建和使用方法;掌握構(gòu)造函數(shù)、析構(gòu)函數(shù)的概念和使用方法;掌握拷貝構(gòu)造函數(shù)的使用方法;掌握對(duì)象數(shù)組和對(duì)象指針的特點(diǎn)和使用方法;掌握函數(shù)調(diào)用中參數(shù)的傳遞方式;理解類的組合的特點(diǎn)。3.重點(diǎn)、難點(diǎn)

重點(diǎn):構(gòu)造函數(shù)、析構(gòu)函數(shù)的使用方法;對(duì)象數(shù)組和對(duì)象指針的特點(diǎn)和使用方法;函數(shù)調(diào)用中參數(shù)的傳遞方式。

難點(diǎn):拷貝構(gòu)造函數(shù)的使用方法;對(duì)象數(shù)組和對(duì)象指針的特點(diǎn)和使用方法;類的組合使用。

第四章、類與對(duì)象的其他特性(4學(xué)時(shí))

1.教學(xué)內(nèi)容

4.1類的靜態(tài)成員 4.2友元

4.3類的作用域和對(duì)象的生存期 4.4常量類型 2.基本要求

掌握類的靜態(tài)成員(靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù))的定義和使用方法;掌握友元函數(shù)、友元類的作用、定義和使用方法;了解類的作用域,理解對(duì)象的類型和生存期;掌握各種常量的特點(diǎn)、定義和使用方法。3.重點(diǎn)、難點(diǎn)

重點(diǎn):靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法;友元函數(shù)、友元類的使用方法。難點(diǎn):靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法;類的作用域、對(duì)象的作用域及生存周期。

第五章、繼承與派生(6學(xué)時(shí))

1.教學(xué)內(nèi)容

5.1類的繼承與派生概念 5.2基類與派生類

5.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù) 5.4多重繼承

5.5子類型與賦值兼容規(guī)則

5.6程序?qū)嵗?2.基本要求

理解基類和派生類的概念;掌握派生類的聲明、生成過程、繼承方式和訪問權(quán)限;掌握派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù);掌握多重繼承的構(gòu)造函數(shù)和析構(gòu)函數(shù)、構(gòu)造順序和析構(gòu)順序及多重繼承中的二義性;掌握虛基類的概念;理解子類型和賦值兼容規(guī)則; 3.重點(diǎn)、難點(diǎn)

重點(diǎn):派生類的繼承方式和訪問權(quán)限;派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義;多重繼承構(gòu)造函數(shù)和析構(gòu)函數(shù)的構(gòu)造順序和析構(gòu)順序;多重繼承中的二義性;虛基類的定義。

難點(diǎn):多重繼承中的二義性;虛基類的定義;理解子類型和賦值兼容規(guī)則。

第六章、多態(tài)性(5學(xué)時(shí))

1.教學(xué)內(nèi)容

6.1運(yùn)算符重載 6.2多態(tài)性的概念 6.3虛函數(shù)

6.4純虛函數(shù)與抽象類 6.5面向?qū)ο蟪绦蛟O(shè)計(jì) 2.基本要求

掌握重載運(yùn)算符的定義方法;了解運(yùn)算符重載為成員函數(shù)與友元函數(shù)的區(qū)別;掌握不同類型數(shù)據(jù)間的轉(zhuǎn)換方法;掌握多態(tài)性的概念;掌握虛函數(shù)的定義和使用方法;掌握純虛函數(shù)和抽象類的定義;了解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想。3.重點(diǎn)、難點(diǎn)

重點(diǎn):成員函數(shù)和友元函數(shù)重載運(yùn)算符;虛函數(shù)的使用方法。難點(diǎn):虛函數(shù)的使用方法;純虛函數(shù)和抽象類的定義和使用。

第七章、模板(2學(xué)時(shí))

1.教學(xué)內(nèi)容

7.1模板的概念

7.2 函數(shù)模板與模板函數(shù) 7.3類模板與模板類 2.基本要求

了解模板的概念;掌握函數(shù)模板的定義和使用,理解函數(shù)模板與模板函數(shù)的關(guān)系;掌握模板函數(shù)顯式具體化;掌握類模板的定義和使用,理解類模板與模板類的關(guān)系;掌握類模板的派生;掌握類模板的顯式具體化。3.重點(diǎn)、難點(diǎn)

重點(diǎn):函數(shù)模板與類模板的使用。難點(diǎn):類模板的使用。

第八章 文件和流

1.教學(xué)內(nèi)容

8.1 C++的輸入/輸出 8.2 標(biāo)準(zhǔn)輸入流 8.3 標(biāo)準(zhǔn)輸出流

8.4 文件的輸入和輸出 2.基本要求

了解C++的輸入/輸出的概念;掌握使用cin進(jìn)行輸入;掌握istream類的方法進(jìn)行輸入。掌握使用cout進(jìn)行輸出;掌握格式化輸出;掌握ostream類的方法進(jìn)行輸出;掌握文件的輸入和輸出。3.重點(diǎn)、難點(diǎn)

重點(diǎn):掌握istream類和ostream類的輸入和輸出方法;掌握文件的輸入和輸出。

難點(diǎn):掌握文件的輸入和輸出。

下載面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解word格式文檔
下載面向?qū)ο蟪绦蛟O(shè)計(jì)教程(C++語言描述)題解.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    《面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)》課程設(shè)計(jì)教學(xué)大綱(寫寫幫整理)

    《面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)習(xí)》課程設(shè)計(jì)教學(xué)大綱 課程編號(hào): 學(xué)時(shí):2周 學(xué)分:2 修課方式:必修 承擔(dān)單位:軟件學(xué)院 考核方式:考查 一、課程設(shè)計(jì)的目的與任務(wù) 1.課程設(shè)計(jì)目的 (1)培養(yǎng)學(xué)生綜合......

    《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》譚浩強(qiáng)版復(fù)習(xí)總結(jié)

    第一章 C++ 基礎(chǔ) endl 換行并刷新輸出流 setw(n) 設(shè)置字段位數(shù)為n hex,oct,dec 十六進(jìn)制,八進(jìn)制,十進(jìn)制表示 setfill 定義填充字符 setprecision 定義浮點(diǎn)數(shù)的精度 left,r......

    《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱

    《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱 課程名稱:信息內(nèi)容安全 課程代碼:042504 總 學(xué) 時(shí):64 學(xué)分:2 課程類型:專業(yè)必修課 適用專業(yè): 信息安全專業(yè) 制 訂 人:徐雪飛 審 定 人:肖文 制訂日期......

    面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)大綱

    面向?qū)ο蟪绦蛟O(shè)計(jì)(專業(yè)限選課) Object-Oriented Programming 【課程編號(hào)】XZ26175 【學(xué)分?jǐn)?shù)】3 【學(xué)時(shí)數(shù)】60=38+22 【課程類別】專業(yè)限選 【編寫日期】2010.3.30 【先修課程......

    《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱

    《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱 課程名稱:面向?qū)ο蟪绦蛟O(shè)計(jì) 英文名稱:Object Oriented Programming) 學(xué)分:2 總學(xué)時(shí):36 實(shí)驗(yàn)(上機(jī))學(xué)時(shí): 8 開課專業(yè):電子商務(wù)專業(yè) 一、 本課程的性質(zhì)......

    面向?qū)ο蟪绦蛟O(shè)計(jì)心得體會(huì)

    這次課程設(shè)計(jì)讓我收獲到很多,上個(gè)學(xué)期我們也有過課程設(shè)計(jì),但是我們都是從網(wǎng)上下一個(gè)程序,連帶著報(bào)告,看一遍程序,修改修改報(bào)告,然后就直接去答辯,都是糊弄糊弄就過去了,自己根本就沒......

    修練8年C++面向?qū)ο蟪绦蛟O(shè)計(jì)之體會(huì)

    修練8年C++面向?qū)ο蟪绦蛟O(shè)計(jì)之體會(huì) 六年前,我剛熱戀“面向?qū)ο蟆保∣bject-Oriented)時(shí),一口氣記住了近十個(gè)定義。六年后,我從幾十萬行程序中滾爬出來準(zhǔn)備寫點(diǎn)心得體會(huì)時(shí),卻無法解......

    面向?qū)ο蟪绦蛟O(shè)計(jì)教程 (馬石安版)

    第1章習(xí)題答案 名詞解釋 抽象:抽象(Abstract)就是忽略事物中與當(dāng)前目標(biāo)無關(guān)的非本質(zhì)特征,而強(qiáng)調(diào)與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,并把具有共性的事物劃為一類。面......

主站蜘蛛池模板: 无码草草草在线观看| 在厨房被c到高潮a毛片奶水| 国产亚av手机在线观看| 久久免费无码高潮看片a片| 噜噜噜亚洲色成人网站∨| 欧美一区二区三区成人片在线| 亚洲一本大道无码av天堂| 精品免费国产一区二区三区四区| 亚洲综合天堂婷婷五月| 国产美女嘘嘘嘘嘘嘘| 亚洲午夜久久久久久噜噜噜| 国产精品国产三级国产专区53| 人妻少妇精品无码专区芭乐视网| 99久久无色码中文字幕| 亚洲最大的成人网| 99亚洲精品卡2卡三卡4卡2卡| 成人欧美一区二区三区黑人| 中文字幕乱码亚洲影视| 开心婷婷五月激情综合社区| 久久欧美一区二区三区性生奴| 国产精品久久久久久人妻精品动漫| 无码一区二区三区亚洲人妻| 亚洲一久久久久久久久| 国内大量偷窥精品视频| 色狠狠久久av五月综合| 欧美嫩交一区二区三区| 久久精品伊人一区二区三区| 中文字幕乱码免费视频| 国产又黄又猛又粗又爽的a片动漫| 国产免费丝袜调教视频| 女人下面毛多水多视频| 中文字幕亚洲欧美日韩2019| 北条麻妃一区二区三区av高清| 国产无遮挡免费真人视频在线观看| 国产人妻精品区一区二区三区| 26uuu在线亚洲欧美| 性色av无码中文av有码vr| 色欲久久久天天天综合网| 强 暴 疼 哭 处 女 身子视频| 久久久久女人精品毛片| 亚洲精品成人福利网站|