第一篇:《面向對象程序設計》(c++)實驗教學大綱
《面向對象程序設計》實驗教學大綱 課程總學時:64
學分:4
實驗學時:16
實驗個數: 6個實驗學分:1分 課程性質:專業必修課適用專業:計算機類專業 教材及參考書:《C++語言程序設計(第四版)》,鄭莉、董淵編著,北京:清華大學出版社,2011 大綱執筆人:楊軍
大綱審定人:
一、實驗課的性質與任務
本課程實驗大綱是面向計算機專業學生開設的《C++程序設計》實驗課計劃指導大綱,是依據《面向對象程序設計》課程教學計劃指導大綱編制。本課程主要講述了利用C++進行程序設計的思想和方法,既有面向過程和面向對象的程序設計的理論知識,又包括極強的實踐應用能力的培養。本實驗大綱力求結合該課程教學計劃大綱的相應內容,由淺入深的指導學生了解和掌握如何利用C++程序設計語言進行程序設計,提高學生的動手能力,做到理論和實踐相結合,培養學生理解,分析程序,編寫,調試程序的能力,使之能把程序設計應用到今后的專業學習中。
二、實驗目的與要求 1.實驗目的
通過本課程的學習,使學生掌握面向過程的程序設計思想和編程思路,初步掌握面向對象的程序設計思想,學會調試程序,能獨立編寫實用的小型程序。2.實驗要求
學生應該自始至終貫徹課程中所介紹的程序設計風格,養成良好的編程習慣; 應獨立完成所布置習題。為保證盡量在統一安排的上機時間內編譯運行通過程序,學生應事先設計好程序。
三、實驗項目及內容提要
面向對象程序設計實驗課程(071016)
序號
實驗編號
實驗名稱
學時
必做
選做
學分數 實驗類型
內容提要
基本操作
驗證
綜合設計 1
類與對象
√
√
函數重載,類的設計與使用 2 2
C++程序的結構
√
√
作用域與生存期,靜態成員
3
數組、指針與字符串 √
√ 三種常見編程元素的使用
4
繼承與派生 √
√
派生類的設計與使用
5 多態性 √
√
運算符重載、動態多態
6
模板和文件 √
√
模板,異常處理機制的設計
四、實驗內容安排: 實驗一類與對象
(設計性實驗
4學時)目的要求:
掌握類的定義和使用;掌握類對象的聲明;練習具有不同訪問屬性的成員的訪問方式;觀察構造函數和析構函數的執行過程; 學習類組合使用方法;
使用VC++的debug調試功能觀察程序流程,跟蹤觀察類的構造函數、析構函數、成員函數的執行順序。實驗內容:
編寫重載函數Max1可分別求取兩個整數,三個整數,兩個雙精度數,三個雙精度數的最大值。
寫一個函數,具有一個引用作為形參參數,在函數中改變引用變量的值,觀察實參變量的變化。
定義一個CPU類,包含等級(Rank)、頻率(frequency)、電壓(voltage)等屬性,有兩個公有成員函數run、stop。其中,rank為枚舉類型CPU__Rank,定義為enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency為單位是MHz的整型數,voltage為浮點型的電壓值。觀察構造函數和析構函數的調用順序。定義一個簡單的Computer類,有數據成員芯片(cpu)、內存(ram)、光驅(cdrom)等等,有兩個公有成員函數run、stop。cpu為CPU類的一個對象,ram為RAM類的一個對象,cdrom為CDROM類的一個對象,定義并實現這個類,為以上的類編寫構造和析構函數,觀察組合類和內嵌類的構造函數和析構函數的調用順序。
為題目2)的類編寫復制構造函數,在主函數中利用復制構造的方式創建新的對象,觀察對象的狀態。
思考并回答以下概念:函數重載,引用,類,對象,數據成員,函數成員,訪問屬性,構造函數,析構函數,類的組合,內嵌對象,初始化列表,復制構造函數。主要儀器設備及軟件:PC+Windows 2000+VC 6.0 實驗二
C++程序的結構(設計性實驗
2學時)目的要求:
觀察程序運行中變量的作用域、生存期和可見性; 學習類的靜態成員的使用;
學習多文件結構在C++程序中的使用。實驗內容:
實現客戶機(CLIENT)類。定義字符型靜態數據成員ServerName,保存其服務器名稱;整型靜態數據成員ClientNum,記錄已定義的客戶數量;定義靜態函數ChangeServerName()改變服務器名稱。
利用多文件結構實現題目1),在頭文件client.h中定義類,在文件client.cpp中實現該類,在文件test.cpp 中測試這個類,觀察相應的成員變量取值的變化情況,要求ClientNum能夠實時記錄客戶機對象的數量。
思考并回答以下概念:類的靜態數據成員,類的靜態函數成員,多文件結構,文件包含。主要儀器設備及軟件:Windows 2000+VC 6.0 實驗三數組、指針與字符串實驗(設計性實驗
4學時)目的要求:
學習使用數組;學習字符串數據的組織和處理;學習標準C++庫的使用; 掌握指針的使用方法;練習通過debug觀察指針的內容及其所指的對象的內容;練習通過動態內存分配實現動態數組,并體會指針在其中的作用; 分別使用字符數組和標準C++庫練習處理字符串的方法。實驗內容:
編寫一個類用于處理3×3矩陣轉置,測試轉置的效果,輸出轉置前后的矩陣。
定義一個具有構造函數和析構函數的類,如實驗一的CPU類,定義一個CPU的對象數組,觀察構造函數的析構函數的調用過程。利用動態內存分配的方式重新完成題目2)。
使用系統提供的string類定義字符串對象并初始化,實現從原始字符串中提取一個子串。選做:定義一個Point(二維點類)的對象數組,利用該數組實現直線的線性擬合。選做:定義一個動態數組類。
思考并回答:數組,指針,對象數組,動態內存分配,默認構造函數,標準類庫,字符串類 string,線性擬合。
3.主要儀器設備及軟件:Windows 2000+VC 6.0 實驗四繼承與派生
(設計性實驗
2學時)目的要求:
學習定義和使用類的繼承關系,定義派生類;熟悉不同繼承方式下對基類成員的訪問控制; 學習利用虛基類解決二義性問題。實驗內容:
定義一個基類Animal,有私有整型成員變量age,構造其派生類dog,在其成員函數SetAge(int n)中直接給age賦值,看看會有什么問題,把 age改為公有成員變量,還會有問題嗎?編程試試看。
定義一個基類BaseClass,有整型成員變量Number,構造其派生類DerivedClass,定義該派生類的對象,觀察構造函數和析構函數的執行情況。
定義一個車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數,由此派生出自行車(bicycle)類,汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcycle)類有座位數(SeatNum)等屬性。從bicycle和motorcycle派生出摩托車(Motorcar)類,在繼承過程中,注意把vehicle設置為虛基類。如果不把vehicle 設置為虛基類,會有什么問?編程實驗及分析原因。
思考并回答:繼承,派生,子類對基類成員的訪問權限,繼承方式,繼承時的構造函數和析構函數的調用順序,虛基類
主要儀器設備及軟件:PC+Windows 2000+VC 6.0 實驗五多態和運算符重載(設計性實驗
2學時)目的要求:
掌握運算符重載的方法;學習使用虛函數實現動態多態性。實驗內容: 定義Point類,有坐標x,y兩個私有成員變量;對Point類重載“+”(相加)、“-”(相減)和“==”(相等)運算符,實現對坐標的改變,要求用友元函數和成員函數兩種方法實現。對Point類重載<<運算符,以使得代碼 Point p;cout<
定義一個車(vehicle)基類,有虛函數Run、Stop等成員函數,由此派生出自行車(bicycle)類、汽車(motorcar)類,它們都有Run、Stop等成員函數。在主函數中用不同的方法調用Run、Stop成員函數,觀察這些函數的執行結果,思考如何實現動態多態性,如果Run、Stop沒有被定義為虛函數,執行結果會怎樣,把結果和分析寫入實驗報告。選做,利用類完成求函數的積分(參考教材)。
思考并回答:多態,實現多態性的方法,虛函數,運算符重載,前++,后++,實現運算符重載的方式。
主要儀器設備及軟件:PC+Windows 2000+VC 6.0 實驗六模板和文件
(設計性實驗
2學時)目的要求:
理解模板的作用和語法。
學習掌握C++文件處理類的基本用法。實驗內容:
使用函數模板實現一個求3個數最大值的函數,并完成測試。
編寫程序,用二進制方式打開指定的一個文件,在每一行前加行號。選做,練習使用STL中的vector模板類。選做,定義一個異常類CException,有成員函數Reason(),用來顯示異常的類型。在子函數中觸發異常,在主程序中處理異常,觀察程序的執行過程。思考并回答:模板,函數模板,類模板,文件,文件讀寫,文件流類,文件操作方式,文件存儲方式; STL,容器,異常處理。
3.主要儀器設備及軟件:PC+Windows 2000+VC 6.0
五實驗報告的格式(本部分要求各學院設計成表格作為教學大綱附件)
實驗完畢,應用專門的實驗報告本,根據預習和實驗中的現象及數據記錄等,及時而認真地寫出實驗報告。實驗報告一般包括以下內容: 實驗(序號)實驗名稱
(一)實驗目的
(二)儀器工具及材料列出實驗中所使用的主要儀器工具及材料。
(三)內容及程序應簡明扼要地寫出實驗步驟流程。
(四)結果及分析應用文字、表格、圖形等形式將數據表示出來。根據實驗要求對數據進行分析和誤差處理。
(五)問題討論結合有關理論對實驗中的現象、產生的誤差等進行討論和分析,以提高自己的分析問題、解決問題的能力,并提出應注意的事項,也為以后的科學研究打下一定的基礎。
六、考核方式、方法及實驗成績評定方法
1、考核方式、方法:
面向對象程序設計實驗課成績占面向對象程序設計總成績的15%,即共15分。考核方法為采用實驗課隨堂檢查學生完成情況及現場提問讓學生回答,根據學生完成情況及答辯情況給分次給出平時成績,共5分。學生在完成實驗后應將自己的實驗過程,結果,經驗寫入實驗報告并提交實驗報告,實驗報告成績占10分,根據學生實驗報告的書寫質量及實驗出勤情況打出。
2、實驗成績評定方法:
評定各級成績時,可參考以下標準:
(一)優秀(很好)14-15 能正確理解實驗的目的要求,能獨立、順利而正確地完成各項實驗操作,會分析和處理實驗中遇到的問題,能掌握所學的各項實驗技能,能較好地完成實驗報告及其它各項實驗作業,有一定創造精神和能力。有良好的實驗工作作風和習慣。
(二)良好(較好)13-14 能理解實驗的目的和要求,能認真而正確地完成各項實驗操作,能分析和處理實驗中遇到的一些問題。能掌握所學實驗技能的絕大部分,對難點較大的操作完成有困難。能一般完成實驗報告和其它實驗作業。有較好的實驗習慣和工作作風。
(三)中等(一般)11-12 能粗淺理解實驗目的要求,能認真努力進行各項實驗操作,但技巧較差。能分析和處理實驗中一些較容易的問題,掌握實驗技能的大部分。有30%掌握得不好。能一般完成各項實驗作業和報告。處理問題缺乏條理。工作作風較好。能認真遵守各項規章制度。學習努力。
(四)及格(較差)8-9 只能機械地了解實驗內容,能一般性地按實驗步驟完成實驗操作,能完成60%所學的實驗技能,有些雖作但不準確。遇到問題常常缺乏解決的辦法,在別人啟發下能作些簡單處理,但效果不理想。能一般完成實驗報告,能認真遵守實驗室各項規章制度,工作中有小的習慣性毛病(如工作無計劃,處理問題缺乏條理)。
(五)不及格(很差)0-7 盲目地操作,只掌握50%的所學實驗技能。有些實驗雖能作,但一般效果不好,操作不正確。工作忙亂無條理。一般能遵守實驗室規章制度,但常有小的錯誤。實驗報告較多的時候有結果,遇到問題時說不明原因,在教師指導下也較難完成各項實驗作業。或有些小聰明但不努力,不求上進。
七、實驗主要應配套儀器設備及臺(套)數(以一個實驗教學班40人為標準)序號
儀器設備名稱
數量
備注
計算機
40臺
C++開發工具軟件
1套
網絡版
八、主要教材及參考書
《C++語言程序設計習題與實驗指導》,鄭莉、傅仕星編著,北京:清華大學出版社,2004
第二篇:C++面向對象程序設計教學大綱
《面向對象程序設計基礎》教學大綱
課程編號:
課程中文名稱:面向對象程序設計
課程英文名稱:Object-Oriented Programming 總學時: 40
實驗學時: 0
上機學時:學分:
2.5 適用專業:軟件工程專業
一、課程性質、目的和任務(300字內)
《面向對象程序設計基礎》是計算機軟件工程專業本科生的一門專業基礎課。面向對象軟件開發方法是吸收了軟件工程領域有益的概念和有效的方法而發展起來的一種軟件開發方法。它集抽象性、封裝性、繼承性和多態性于一體,可以幫助人們開發出模塊化的程序,并體現信息隱蔽、可復用、易修改、易擴充等特性。本課程主要介紹面向對象程序設計的方法和C++語言的基本概念及C++語言中的面向對象機制。通過本課程的學習,應使學生能夠較好地理解和掌握面向對象程序設計技術的基本概念,掌握面向對象程序的設計方法,并能夠在C++環境下(如VC++)開發較大型的應用程序。從而為以后的工作和學習打下基礎。
二、課程教學內容及學時分配
第一章、面向對象程序設計概述(3學時)
1.教學內容
1.1面向對象程序設計方法的產生和發展
1.2面向過程和面向對象程序設計方法概述 1.3 面向對象程序設計的基本術語 1.4 面向對象程序設計的基本特征 1.5面向對象程序設計語言
1.6基于Visual Studio 2010的C++應用程序的開發 2.基本要求
了解面向對象技術的發展歷程;了解面向過程和面向對象程序設計兩種程序設計方法 優缺點;掌握面向對象程序設計的特點;掌握面向對象程序設計的相關術語和基本特征;了解目前常用的面向對象程序設計語言。了解Visual Studio環境下,C++應用程序的開發過程。3.重點、難點
重點:面向對象程序設計的特點(數據的抽象與封裝、繼承性、多態性)及面向對象的基本術語;C++應用程序的開發環境。
難點:面向對象程序設計的特點(數據的抽象與封裝、繼承性、多態性)和面向對象的基本術語。
第二章、C++基礎(6學時)
1.教學內容
2.1C++程序的組成部分 2.2 命名空間
2.3 C++數據的輸入輸出 2.4引用 2.5函數
2.6 變量的的作用域與可見性 2.7對象的生存期 2.8 const常量
2.9動態內存分配和釋放 2.10編譯預處理
2.11文件的輸入和輸出 2.基本要求
了解C++程序的組成部分;掌握命名空間、變量的的作用域與可見性及生存期的概念;掌握引用及函數的引用參數和返回引用的概念和使用;掌握帶有默認參數的函數的使用;掌握內聯函數和重載函數的使用;掌握動態內存分配和釋放的方法;掌握磁盤文件的輸入輸出操作方法。3.重點、難點
重點:引用及函數的引用參數和返回引用的概念和使用;動態內存分配和釋放的方法;默認參數的函數的使用;內聯函數和重載函數的使用。
難點:函數的引用參數和返回引用的使用;掌握磁盤文件的輸入輸出操作方法。
第三章 類和對象(6學時)
1.教學內容
3.1類和對象的概念 3.2類的定義
3.3對象的創建與使用
3.4構造函數 3.5析構函數
3.6構造函數和析構函數的調用順序 3.7 對象數組與對象指針 3.8向函數傳遞對象 3.9對象的賦值和復制 3.10類的組合 2.基本要求
理解類的概念,掌握類的定義方法;理解對象與類的關系,掌握對象的創建和使用方法;掌握構造函數、析構函數的概念和使用方法;掌握拷貝構造函數的使用方法;掌握對象數組和對象指針的特點和使用方法;掌握函數調用中參數的傳遞方式;理解類的組合的特點。3.重點、難點
重點:構造函數、析構函數的使用方法;對象數組和對象指針的特點和使用方法;函數調用中參數的傳遞方式。
難點:拷貝構造函數的使用方法;對象數組和對象指針的特點和使用方法;類的組合使用。
第四章、類與對象的其他特性(4學時)
1.教學內容
4.1類的靜態成員 4.2友元
4.3類的作用域和對象的生存期 4.4常量類型 2.基本要求
掌握類的靜態成員(靜態數據成員和靜態成員函數)的定義和使用方法;掌握友元函數、友元類的作用、定義和使用方法;了解類的作用域,理解對象的類型和生存期;掌握各種常量的特點、定義和使用方法。3.重點、難點
重點:靜態數據成員和靜態成員函數的使用方法;友元函數、友元類的使用方法。難點:靜態數據成員和靜態成員函數的使用方法;類的作用域、對象的作用域及生存周期。
第五章、繼承與派生(6學時)
1.教學內容
5.1類的繼承與派生概念 5.2基類與派生類
5.3派生類的構造函數和析構函數 5.4多重繼承
5.5子類型與賦值兼容規則
5.6程序實例 2.基本要求
理解基類和派生類的概念;掌握派生類的聲明、生成過程、繼承方式和訪問權限;掌握派生類的構造函數和析構函數;掌握多重繼承的構造函數和析構函數、構造順序和析構順序及多重繼承中的二義性;掌握虛基類的概念;理解子類型和賦值兼容規則; 3.重點、難點
重點:派生類的繼承方式和訪問權限;派生類的構造函數和析構函數的定義;多重繼承構造函數和析構函數的構造順序和析構順序;多重繼承中的二義性;虛基類的定義。
難點:多重繼承中的二義性;虛基類的定義;理解子類型和賦值兼容規則。
第六章、多態性(5學時)
1.教學內容
6.1運算符重載 6.2多態性的概念 6.3虛函數
6.4純虛函數與抽象類 6.5面向對象程序設計 2.基本要求
掌握重載運算符的定義方法;了解運算符重載為成員函數與友元函數的區別;掌握不同類型數據間的轉換方法;掌握多態性的概念;掌握虛函數的定義和使用方法;掌握純虛函數和抽象類的定義;了解面向對象程序設計的基本思想。3.重點、難點
重點:成員函數和友元函數重載運算符;虛函數的使用方法。難點:虛函數的使用方法;純虛函數和抽象類的定義和使用。
第七章、模板(2學時)
1.教學內容
7.1模板的概念
7.2 函數模板與模板函數 7.3類模板與模板類 2.基本要求
了解模板的概念;掌握函數模板的定義和使用,理解函數模板與模板函數的關系;掌握模板函數顯式具體化;掌握類模板的定義和使用,理解類模板與模板類的關系;掌握類模板的派生;掌握類模板的顯式具體化。3.重點、難點
重點:函數模板與類模板的使用。難點:類模板的使用。
第八章 文件和流
1.教學內容
8.1 C++的輸入/輸出 8.2 標準輸入流 8.3 標準輸出流
8.4 文件的輸入和輸出 2.基本要求
了解C++的輸入/輸出的概念;掌握使用cin進行輸入;掌握istream類的方法進行輸入。掌握使用cout進行輸出;掌握格式化輸出;掌握ostream類的方法進行輸出;掌握文件的輸入和輸出。3.重點、難點
重點:掌握istream類和ostream類的輸入和輸出方法;掌握文件的輸入和輸出。
難點:掌握文件的輸入和輸出。
第三篇:《面向對象程序設計方法》實驗教學大綱
《面向對象程序設計方法》實驗教學大綱
(計算機科學與技術本科專業使用)
一、教學目標
通過該實驗課,學生應在熟練掌握過程化程序設計方法的基礎上,領會面向對象程序設計及類的封裝、數據隱藏、繼承及多態等特性,逐步掌握面向對象程序設計方法,培養一定的程序設計能力,為以后各專業課程的學習打下良好的程序設計基礎。
二、實驗教學時數
三、實驗內容
實驗一 圖形打印
1、實驗目的:練習for循環
2、實驗技能培訓內容:打印幾種特殊圖形,如菱形和Z字形
3、主要儀器:計算機
4、實驗方法:上機編程
實驗二 判素數
1、實驗目的:練習函數
2、實驗技能培訓內容:判斷101-200之間有多少個素數,并輸出所有素數。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗三 遞歸函數練習
1、實驗目的:練習遞歸函數
2、實驗技能培訓內容:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 兔子的規律為數列1,1,2,3,5,8,13,21....3、主要儀器:計算機
4、實驗方法:上機編程
實驗四 數列排序
1、實驗目的:練習數組及幾種基本排序方法
2、實驗技能培訓內容:用選擇、插入、冒泡、快速等幾種基本的排序方法對數列進行排序。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗五 矩陣乘積
1、實驗目的:練習數組
20學時
2、實驗技能培訓內容:用數組存儲兩個矩陣,求兩個矩陣的乘積。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗六 設計時間日期類
1、實驗目的:掌握簡單類的設計方法
2、實驗技能培訓內容:構造一個TimeDate類,類中包含一個成員函數,用來在屏幕上顯示時間與日期(采用建立在標準庫time.h中的標準時間與日期來尋找與顯示日期)。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗七 設計計時類
1、實驗目的:掌握簡單類的設計方法
2、實驗技能培訓內容:建立Watch類,用來仿效秒表跟蹤消逝的時間。用構造函數將消逝時間的初值置為零。提供兩個成員函數Start()與Stop(),分別打開與關閉計時器。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗八 設計字符棧類
1、實驗目的:掌握簡單類的設計方法
2、實驗技能培訓內容:用Stack類,寫一個函數LoadStack(),用來返回已經將字母表(a-z)入棧的堆棧。在調用函數中,將這個堆棧賦值給另一個對象,并證明它包含字母表。可以改變堆棧的尺寸,以便它大得足以支持字母表。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗九 友元的使用方法
1、實驗目的:掌握友元的使用方法
2、實驗技能培訓內容:求兩數的平方差(友元函數說明)
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十 訪問權限
1、實驗目的:掌握類成員的各種訪問權限
2、實驗技能培訓內容:類成員的各種訪問權限
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十一 類的派生
1、實驗目的: 掌握類的派生
2、實驗技能培訓內容:給出基類AreaClass(形狀類),建立兩個派生類Box(方形類)與Isosceles(等腰三角形類),讓每個派生類包含一個函數Area(),分別用來返回方形與等腰三角形的面積。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十二 用類方法求解一元二次方程
1、實驗目的: 掌握類的派生
2、實驗技能培訓內容:實現一個Complex類和一個Real類。將Real類定義為Complex類的子類。然后設計一個求解一元二次實系數方程的根的類Root。
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十三 類繼承中的構造
1、實驗目的: 掌握類繼承中的構造
2、實驗技能培訓內容:類繼承中的構造方法
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十四 類繼承中的構造
1、實驗目的: 掌握類繼承中的構造
2、實驗技能培訓內容:類繼承中的構造方法
3、主要儀器:計算機
4、實驗方法:上機編程
實驗十五 大學生類
1、實驗目的: 掌握虛函數的使用
2、實驗技能培訓內容:設計一個大學的類系統,包括Student(學生),Professor(教師),Staff(職員)。另有一個類既作為學生又兼作助教的可作為派生類StudentStaff,它是由Student類和Staff類派生而來,另外定義一個父類DataRec作為上述類(子類)的基類。
3、主要儀器:計算機
4、實驗方法:上機編程
責任撰寫人:陳桂芬
第四篇:面向對象程序設計實驗教學大綱
《面向對象程序設計》
實驗指導書
《面向對象程序設計實驗》課程組
目錄
實驗預備 實驗環境和工具使用,多文件應用程序的開發過程 實驗一 類與對象
實驗二 實驗三 實驗四 實驗五 實驗六 實驗七 I/O實驗八
構造函數、析構函數 繼承-單繼承 繼承-多繼承
多態-運算符重載
多態-虛函數 流與文件 模板
實驗預備 實驗環境和工具使用 多文件應用程序的開發過程
一、實驗目的與要求
Visual C++提供了一個集源程序編輯、代碼編譯與調試于一體的開發環境,這個環境稱為集成開發環境,對于集成開發環境的熟悉程度直接影響程序設計的效率,本實驗通過學習Visual C++ 6.0界面的常用組成情況,并學習各種常用的窗口、菜單、按鈕的意義和功能,并通過一些簡單的程序設計,目的是使學生對用戶界面、菜單和工具欄有一個全面的了解并掌握主要菜單命令。
? 了解Visual C++集成開發環境的界面組成; ? 理解菜單命令的含義 ? 掌握“New:”菜單命令、“Breakpoints”菜單命令、“Build”菜單命令、“Source Brower”菜單命令、工具欄的定制和修改、聯機幫助。? 簡單的程序設計
二、實驗設備與平臺
實驗設備要求每個學生一臺電腦,其中運行環境為VC++ 6.0系統。
三、實驗內容及步驟 1.上機實驗內容
? ? ? ? ? ? ? ? Visual C++集成開發環境的用戶界面識別; 新文件、新工程項目、工作區的創建; 設置、查看和刪除斷點; 編譯和運行程序; 瀏覽資源信息;
工具欄的定制和修改; 聯機幫助的使用;
熟悉Visual C++編寫控制臺模式程序的方法; 上機輸入例題,調試并運行,并觀察結果; ? 上機編寫一個程序
實驗1調試并編譯程序。
在Visual C++下,編寫控制臺模式的程序和在DOS下編寫程序相似,具有簡單方便的特點,一般用于后臺程序的編寫。控制臺模式下程序的編寫有兩種方法,一是創建一個C++源程序文件,二是創建一個控制臺模式的工程。
⑴ 創建一個C++源程序文件
① 啟動Visual C++,單擊“File”菜單下的“New”菜單命令,出現“New”對話框。然后選擇“Files”選項卡,在此選項卡的左側,單擊“C++ Source Files”:在選項卡的右側,選擇源程序存放的位置(location)以及源程序文件名(File),然后單擊【OK】按鈕。注意C++源程序文件的擴展名為.cpp。
② 在編輯區輸入源程序,程序內容如下:
#include
(Build)按鈕或者選擇“Build”菜單命令,系統提示是否創建一個默認的工程工作區,單擊【是】按鈕即可。④ 系統開始編譯源程序并鏈接相應的文件,如果沒有錯誤則在集成開發環境下方的狀態欄中出現下列提示“0error(s),0warning(s)”,此時可以按
① 啟動Visual C++,單擊“File”菜單下的“New”菜單命令,出現“New”對話框。然后選擇“Projects”選項卡,在此選項卡的左側,單擊“Win32 Console Application”;在選項卡的右側,選擇工程文件存放的位置(location)以及工程文件名(Project Name)。然后單擊【OK】按鈕。
② 在“Win32 Console Application-Step 1 of 1”對話框中選擇應用程序的類型“An empty project”,單擊【Finish】按鈕。③ 在集成開發環境的左側單擊“File View”屬性頁,右鍵單擊“Source Files”,選擇“Add Files to Folder?”。在“文件名”中填入文件名,此時也可以選擇存在的文件。
④ 此時在“Source Files”左側出現一個加號,單擊加號,出現新的源程序文件“1_1.cpp”,雙擊此文件,在集成開發環境的右側輸入例1_1.⑤ 按照創建一個C++源程序文件的第④個步驟編譯和運行程序。
圖1-1 向工程中添加源程序文件
圖1-2 選擇添加的源程序文件的文件名與類型
實驗一 類與對象
一、實驗目的與要求
(1)掌握類和對象的概念、定義和使用方法。(2)掌握不同特性對象成員的訪問方法
二、實驗設備與平臺
實驗設備要求每個學生一臺電腦,其中運行環境為VC++ 6.0系統。
三、實驗內容及步驟
(1)定義一個描述學生類,數據成員包括:姓名、性別、年齡;成員函數包括:輸出各個數據成員的值,設置各個數據成員的值。
(2)求點到直線的距離。定義一個點類Point,數據成員包括:坐標點。成員函數包括:設置各個數據成員的值的構造函數Point(), 取得坐標值的函數Getx(),Gety(),設計一直線類Line,數據成員包括:直線系數a,b,c;成員函數包括:取得系數的函數Geta(),Getb(),Getc();構造函數Line();
? 說明:
? d=|a*x0+b*y0+c|/sqrt(a*a+b*b)
實驗二 構造函數與析構函數
一、實驗目的與要求
1.掌握構造函數和析構函數的使用方法。2.掌握靜態成員的使用方法。3.掌握友員的使用方法。
二、實驗設備與平臺
實驗設備要求每個學生一臺電腦,其中運行環境為VC++ 6.0系統。
三、實驗內容及步驟
(1)寫出下列程序的執行結果,然后上機進行驗證。用VC6的Debug的功能跟蹤構造函數、析構函數和成員函數的執行順序。#include
x = 2;y = 50;z = 9;} TEST(int a,int b,int c){
cout << “調用重載構造函數”<< endl;
x = a;y = b;z = c;} void display(){
cout << “x=” << x << 't' << “y=” << y <<'t' << “z=” << z << endl;} int max(int a,int b){
if(a>b)return a;else return b;} ~TEST(){
cout << “調用析構函數” << endl;
cout << x << “,” << y <<“和” << z << “最大值是:” << max(max(x,y),z)<< endl;} private: int x,y,z;};
void main(){ TEST obj1;obj1.display();TEST obj2(33, 20, 80);obj2.display();}(3)靜態成員練習:書例子 class tc {
(4)友元練習:書例子
實驗三 繼承-單繼承
一、實驗目的及要求
1、掌握繼承、基類和派生類的概念。
2、掌握初始化基類成員的方法。
3、掌握派生類對基類的繼承。
二、實驗設備與平臺
1、硬件環境:微型計算機,2、軟件環境:Visual C++ 6.0;
三、實驗內容及步驟
? 要求:設計點類、圓類和圓柱類,其中,圓類繼承點類,圓柱類繼承圓類。求:圓面積。圓柱表面積、體積。? 圓的面積:S=PI*R*R ? 周長:C= 2*PI*R ? 圓柱表面積:A=2*PI*R*H+2*PI*R*R ? =C*H+2*S ? 圓柱體積: V=PI*R*R*H =S*H
? class Point //點類 ? { ? protected: ? double x,y;? public: ? Point(double x0,double y0); double Area();
? };? class Circle:public Point { //圓類 ? protected: ? double r;//半徑 ? public: ? Circle(double x0,double y0,double radius)? double Area()//計算圓的面積 ?
? };? class Cylinder: public Circle { //圓柱體類 ? double h;//高度 ? public: ? Cylinder(double x0=0,double y0=0,double height=0){ ?
? double Area()//計算圓柱體的表面積 ?
? double Volume()//計算圓柱體的體積 ? } ? };
思考:點,矩形,立方體?
radius=0, double
實驗四 繼承-多繼承
一、實驗目的及要求
1、掌握繼承、基類和派生類的概念。
2、掌握初始化基類成員的方法。
4、掌握派生類對基類的繼承。
二、實驗設備與平臺
1、硬件環境:微型計算機,2、軟件環境:Visual C++ 6.0;
三、實驗內容及步驟
1閱讀程序,寫出實驗結果。
#include “stdafx.h” #include “iostream.h” class BASE1 {public: void show_i(){ cout<
j=y;} };int main(int argc, char* argv[]){ DERIVED obj;obj.set(5,7);obj.show_i();obj.show_j();return 0;} 2 書上作業。Student,worker,s_w.?
實驗五 運算符重載
一、實驗目的及要求
1、掌握用成員函數重載運算符的方法。
2、掌握用友元函數重載運算符的方法。
二、實驗設備與平臺
1、硬件環境:微型計算機,2、軟件環境:Visual C++ 6.0;
三、實驗內容及步驟
1、定義一個復數類,通過重載運算符:“ *”,“/”,直接實現二個復數之間的乘除運算。編寫一個完整的程序,測試重載運算符的正確性。要求乘法“*”用友元函數實現重載,除法“/”用成員函數實現重載。
分析:兩復數相乘的計算公式為:(a+b i)*(c+d i)=(ac-bd)+(ad+bc)i 兩復數相除的計算公式為:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i
2、定義一個分數類,通過重載運算符:“ *”,“/”,直接實現二個分數之間的乘除運算。編寫一個完整的程序,測試重載運算符的正確性。要求乘法“*”用友元函數實現重載,除法“/”用成員函數實現重載。
實驗六 多態性-虛函數
一、實驗目的及要求
5、學習虛函數和純虛函數的定義與使用方式。
6、理解抽象類的概念,學習如何用指針指向其他的派生類,實現多態性。
7、掌握抽象類的定義與使用方式,并注意指針的用法。
7、學習如何使用虛函數、純虛函數、抽象類和實現類的多態性。
二、實驗設備與平臺
1、硬件環境:微型計算機,2、軟件環境:Visual C++ 6.0;
三、實驗內容及步驟
1、虛函數的簡單使用。
# include
class subclass: public base { public: virtual void fn(){ cout ? “In subclass n ”;} };
void test(base &b){ b.fn();} void main(){ base be;subclass sc;cout? “ Calling test(bc)n ”;test(bc);cout? “Calling test(sc)n ”;test(sc);}
2、定義一個從正方形、球體和圓柱體的各種運算中抽象出一個公共基 container類,在其中定義表面積和體積的純虛函數,分析:
定義一個派生于container類的正方體類cube,在類中都具有求表面積的和體積的重定義的成員函數。定義一個派生于container類的球體類sphere,在類中都具有求表面積和體積的重定義的成員函數。
定義一個派生于container類的圓柱體類cylinder,在類中都具有求表面積和體積的重定義的成員函數。
實驗八 模板
一、實驗目的及要求
1.了解函數模板、類模板與模板函數、模板類的關系; 2.熟悉函數模板、類模板的聲明與實例化過程; 3.掌握應用模板進行的程序設計
二、實驗設備與平臺
實驗設備要求每個學生一臺電腦,其中運行C程序環境為VC 6.0系統。
三、實驗內容及步驟
模板的概念:
若一個程序的功能是對某種特定的數據類型進行處理,則將所處理的數據類型說明為參數,就可把這個程序改寫為模板。模板可以讓程序對任何其他數據類型進行同樣方式的處理。
C++程序由類和函數組成,模板也分為函數模板(function template)和類模板(class template)。因此,可以使用一個帶有多種不同數據類型的函數和類,而不必顯式記憶針對不同的數據類型的各種具體版本。
函數模板的一般定義形式是: template <類型形式參數表> 返回類型 FunctionName(形式參數表){ //函數定義體 } 其中的類型形式參數表可以包含基本數據類型,也可以包含類類型。如果是類類型,則須在前面加上 calss。
這樣的函數模板定義,不是一個實實在在的函數,編譯系統不為其產生任何執行代碼。該定義只是對函數的描述,表示它每次能單獨處理在類型形式參數表中說明的數據類型。當編譯系統發現有一個函數調用: FunctionName(實在參數表);將根據實在參數表中的類型,確認是否匹配函數模板中對應的形式參數表,然后生成一個重載函數。該重載函數的定義體與函數模板的函數定義體相同,而形式參數表的類型則以實在參數表的實際類型為依據。該重載函數稱為模板函數(template function)。
注意:函數模板與模板函數的區別在于,函數模板是模板的定義,定義中用到通用類型參數。模板函數是實實在在的函數定義,它由編譯系統在碰見具體的函數調用時所生成,具有程序代碼。
實驗1:用函數模板方法編寫程序,對給各種不同類型的三個數分別求最大數。要求:編程序上機通過,寫出運行結果。
實驗2: 用函數模板方法編寫程序,對給各種不同類型的兩個數的和。
要求:編程序上機通過,寫出運行結果。
實驗七 I/O流與文件
一、實驗目的與要求
(1)掌握流的概念。
(2)掌握文本文件和二進制文件的使用方法。
二、實驗設備與平臺
1、硬件環境:微型計算機,2、軟件環境:Visual C++ 6.0;
三、實驗內容與步驟:
(1)#include
cout< (3)建立一個文本文件“textfile.txt”(內容由讀者選定),然后顯示該文件,(4)建立若干個結構體類型的學生數據。要求 (1)鍵盤輸入學生的信息,學生的屬性包括學號、姓名和成績,(2)用文件流中write函數將學生的信息寫入文件D:student.dat(3)將student.dat中所有的數據讀到內存中并顯示輸出在屏幕上。(10分)編寫程序上機完成如下工作: Struct student { Int num;Char name[20];Float score;}stu[10];Main(){ //用鍵盤輸入 For(int i=0;i<10;i++)Cin>>。。。。//寫入文件中 Ifstream ifile(“d:student.dat”,ios::binary);//建立文件,并打開 if(!ifile.fail())//異常處理 { cerr<<“not open!” return 0;} For(int i=0;i<10;i++)Ifile.write(??..);//寫入 Ifile.close();//關閉 //讀文件 Ofstream ofile(“d:student.dat”,ios::binary);For(int i=0;i<10;i++){Ofile.read(?..)//讀出文件 Cout< 實驗六 綜合應用程序一 一、實驗目的 本實驗是對前面所學知識的總結,通過一個比較完整的應用程序的設計,將學過的知識連貫起來,掌握開發一個實際應用程序的步驟,同時學會使用開發工具實現界面友好的應用程序。并通過本實驗,掌握如何運用面向對象技術對具體的應用系統進行分析和設計。 二、基本知識點 1、類和對象的定義、對象的初始化和使用 2、面向對象的繼承機制 3、虛函數與多態性 4、運算符重載 5、文件的使用 6、算法的使用 三、基本要求 1、理解面向對象的特性 2、掌握面向對象程序設計的開發方法 3、有一定的分析問題和解決問題的能力 4、根據學過的知識點,充分利用已有的開發工具和素材,使程序編寫具有更高的效率,能真正地解決實際問題。 四、實驗內容: 可以在多個題目中選擇一個: 1、編寫一本通信錄 2、模擬簡單計算器 3、簡單的管理系統的設計:如人事、工資、學生成績等。(要求部分功能實現)。 五、學生實驗報告要求 1、實驗步驟 1)設計確定類的結構及各類之間的關系,注意成員變量和函數的性質(共有、私有或保護),哪些函數需要動態(定義為虛擬函數)。 2)創建系統項目(解決方案, Project)。 3)按上述結構定義各類,在構造函數中對成員變量進行初始化。4)定義各類中的成員函數 5)對用到的算法進行描述 2、完成編寫相關實驗代碼 3、對實驗結果進行分析 4、對本次實驗要有總結 注意:要求在系統設計階段對數據結構(主要是類的結構及類之間的聯系)進行分析研究,充分利用面向對象的特性,使類結構盡可能合理和高效。 《面向對象程序設計實驗》課程教學大綱 第六次實驗: 友元的使用方式 1.學時:2課時; 2.實驗類型:驗證性實驗 3.實驗目的: (1)了解友元機制的由來和本質;(2)理解友元機制的主要作用; (3)掌握友元函數、友元成員和友元類的聲明、定義和使用方法,并注意友元機制的安全風險問題。 4.實驗內容: 實驗題目1:友元函數的聲明、定義和使用(1)程序功能簡介 編程實現一個類的友元函數的聲明、定義和使用代碼。(2)程序設計要求 ① 采用聲明和定義分開的方式實現一個類的友元函數; ② 通過調用友元函數,實現對一個類內所有訪問權限的成員進行訪問,驗證友元機制。(3)程序設計說明 ① 參考教材例4.2(見P86)、例4.3(見P86)、例4.4(見P87)。(4)撰寫實驗報告 參考實驗報告模板。 實驗題目2:友元成員和友元類的聲明、定義和使用(1)程序功能簡介 編程實現一個類的友元成員和友元類的聲明、定義和使用代碼。(2)程序設計要求 ① 采用聲明和定義分開的方式實現一個類的友元成員和友元類; ② 通過調用友元成員以及友元類的對象,實現對一個類內所有訪問權限的成員進行訪問,驗證友元機制。(3)程序設計說明 ① 參考教材例4.5(見P91)、例4.6(見P92)、例4.7(見P93)。(4)撰寫實驗報告 參考實驗報告模板。實驗題目3:利用友元機制計算兩點之間的距離(1)程序功能簡介 設計一個點(Point)類,其中包括一對坐標數據成員、一個求兩點之間距離的友元接口和顯示坐標點的成員函數,并用數據進行測試。(2)程序設計要求 ① 首先,采用友元函數distance()的方式實現友元接口; ② 其次,采用友元成員distance()的方式實現友元接口; ③ 最后,嘗試采用友元類的方式實現友元接口。(3)程序設計說明 ① 在頭文件中聲明類,在程序文件中定義類的成員函數; ② 采用構造函數進行對象的初始化; ③ 對于友元成員和友元類兩種實現方式,可以另外定義一個求解兩點距離的ComputeDistance類,將distance()作為該類的成員函數。(4)撰寫實驗報告 參考實驗報告模板。第五篇:2017-教學大綱-《面向對象程序設計實驗》