版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章C++初步知識
第二章類和對象
第三章關(guān)于類和對象深入討論
第四章運(yùn)算符重載
第五章繼承與派生
第六章多態(tài)性與虛函數(shù)
第七章輸入輸出流第1頁第一章C++初步知識1.1從C到C++1.2C++語言詞法和詞法規(guī)則1.3最簡單C++程序1.4C++對C擴(kuò)充√1.5C++程序編寫和實(shí)現(xiàn)第2頁1.4C++對C擴(kuò)充C++既可用于面向過程程序設(shè)計(jì),也可用于面向?qū)ο蟪绦蛟O(shè)計(jì)。C++繼承了C語言提供絕大部分功效和語法要求,并在此基礎(chǔ)上作了擴(kuò)充。第3頁1.4.1C++輸入和輸出1.4.2用const定義常變量1.4.3函數(shù)原型申明1.4.4函數(shù)重載1.4.5函數(shù)模板1.4.6有默認(rèn)參數(shù)函數(shù)第4頁1.4.7變量引用1.4.8內(nèi)置函數(shù)1.4.9作用域運(yùn)算符1.4.10字符串變量1.4.11動態(tài)分配/回收內(nèi)存運(yùn)算符第5頁作業(yè)5,6,7,10,11,13(改成用模板和變量引用設(shè)計(jì))第6頁第2章類和對象2.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.2類申明和對象定義√2.3類組員函數(shù)√2.4對象組員引用(調(diào)用)√2.5類和對象簡單應(yīng)用2.6類封閉性和信息隱蔽第7頁類定義格式:
class類名
{ private:
私有組員申明
public:
公有組員申明
protected:
保護(hù)組員申明
};class是保留字,申明類類型類名:按標(biāo)識符取名。private、public、protected也是保留字,是組員訪問限定符,其后必須跟冒號。在類申明}后如不直接定義對象就必須跟分號。第8頁private:只能被本類中組員函數(shù)訪問,類外(除友元外)不能訪問。public:公有組員能夠被本類組員函數(shù)訪問,也能在類作用域范圍內(nèi)其它函數(shù)訪問。protected:受保護(hù)組員可由本類組員函數(shù)訪問,也能由派生類組員函數(shù)訪問。 在定義類時(shí),這三類組員不分前后次序,也能夠重復(fù)出現(xiàn)。普通推薦最多出現(xiàn)一次。第9頁例2.3類組員調(diào)用 #include<iostream> usingnamespacestd;
classTime {private: inthour; intminute; intsec;
public: voidset_time(); voidshow_time(); };第10頁intmain(){Timet1;
t1.set_time();
t1.show_time();Timet2;t2.set_time();t2.show_time();return0;}第11頁
voidTime::set_time() { cin>>hour; cin>>minute; cin>>sec; }
voidTime::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; }第12頁多文件系統(tǒng)普通在面向?qū)ο蟪绦蜷_發(fā)時(shí):將類申明(包含組員函數(shù)申明)放在指定頭文件(*.h)中;把類組員函數(shù)定義放在源文件(*.cpp)中;在應(yīng)用程序中只要把相關(guān)頭文件包含進(jìn)來即可。第13頁作業(yè)P68習(xí)題5,6
第14頁第3章關(guān)于類和對象深入討論
本章將對類和對象進(jìn)行深入討論。 3.1構(gòu)造函數(shù)√ 3.2析構(gòu)函數(shù)√ 3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)次序√ 3.4對象數(shù)組 3.5對象指針 3.6共用數(shù)據(jù)保護(hù)(難點(diǎn)) 3.7對象動態(tài)建立和釋放 3.8對象賦值和復(fù)制 3.9靜態(tài)成員 3.10友元 3.11類模板第15頁3.1結(jié)構(gòu)函數(shù)3.1.1對象初始化3.1.2結(jié)構(gòu)函數(shù)作用3.1.3帶參數(shù)結(jié)構(gòu)函數(shù)3.1.4用參數(shù)初始化表初始化數(shù)據(jù)組員3.1.5結(jié)構(gòu)函數(shù)重載3.1.6使用默認(rèn)參數(shù)結(jié)構(gòu)函數(shù)確定對象初始狀態(tài)第16頁3.1.2結(jié)構(gòu)函數(shù)作用結(jié)構(gòu)函數(shù)作用:用于為對象分配空間和進(jìn)行初始化。結(jié)構(gòu)函數(shù)特點(diǎn):(1)結(jié)構(gòu)函數(shù)名字與它類名必須相同;(2)它沒有類型,不返回值,為public類型;(3)它能夠帶參數(shù),也能夠不帶參數(shù);(4)不需要寫調(diào)用語句,在系統(tǒng)建立對象時(shí)由系統(tǒng)自覺調(diào)用執(zhí)行。(5)假如用戶沒有定義結(jié)構(gòu)函數(shù),C++系統(tǒng)會自動生成一個空結(jié)構(gòu)函數(shù)。第17頁 #include<iostream> usingnamespacestd; classBox {public:
Box();
//不帶形參結(jié)構(gòu)函數(shù)為系統(tǒng)默認(rèn)函數(shù)
Box(inth,intw,intlen):height(h),width(w),length(len){} intvolume(); private: intheight; intwidth; intlength; };這是什么?結(jié)構(gòu)函數(shù)也能夠重載。一個類能夠有多個同名結(jié)構(gòu)函數(shù),函數(shù)參數(shù)個數(shù)、參數(shù)類型各不相同定義對象是只執(zhí)行一個結(jié)構(gòu)函數(shù)第18頁 #include<iostream> usingnamespacestd; classBox {public:
Box(intw=10,inth=10,intlen=10); intvolume(); private: intheight; intwidth; intlength; };例3.4:將例3.3中結(jié)構(gòu)函數(shù)改用帶默認(rèn)值參數(shù),長、寬、高默認(rèn)值都是10。假如在類外定義結(jié)構(gòu)函數(shù),應(yīng)該在申明結(jié)構(gòu)函數(shù)時(shí)指定默認(rèn)參數(shù)值,在定義函數(shù)時(shí)能夠不再指定默認(rèn)參數(shù)值。第19頁3.2析構(gòu)函數(shù)作用:與結(jié)構(gòu)函數(shù)相反,當(dāng)對象生命周期結(jié)束時(shí),系統(tǒng)自動調(diào)用析構(gòu)函數(shù),收回對象占用內(nèi)存空間。析構(gòu)函數(shù)特征 ①析構(gòu)函數(shù)名以~符號開始后跟類名 ②析構(gòu)函數(shù)沒有數(shù)據(jù)類型、返回值、形參。因?yàn)闆]有形參所以析構(gòu)函數(shù)不能重載。 ③假如程序員沒有定義析構(gòu)函數(shù),C++編譯系統(tǒng)會自動生成一個析構(gòu)函數(shù)。第20頁3.3調(diào)用結(jié)構(gòu)函數(shù)和析構(gòu)函數(shù)次序當(dāng)定義多個對象時(shí):先結(jié)構(gòu)后析構(gòu),后結(jié)構(gòu)先析構(gòu)。對象1結(jié)構(gòu)函數(shù)對象2結(jié)構(gòu)函數(shù)對象1析構(gòu)函數(shù)對象2析構(gòu)函數(shù)第21頁作業(yè)P116習(xí)題2,4,7.(1)(2),12
第22頁第四章運(yùn)算符重載
4.1什么是運(yùn)算符重載
4.2運(yùn)算符重載方法√
4.3重載運(yùn)算符規(guī)則√
4.4運(yùn)算符重載函數(shù)作為類組員函數(shù)和友元函數(shù)√
4.5重載雙目運(yùn)算符
4.6重載單目運(yùn)算符
4.7重載流插入運(yùn)算符和流提取運(yùn)算符
第23頁4.2運(yùn)算符重載方法方法:定義一個重載運(yùn)算符函數(shù),在需要時(shí)系統(tǒng)自動調(diào)用該函數(shù),完成對應(yīng)運(yùn)算。實(shí)質(zhì):函數(shù)重載。運(yùn)算符重載函數(shù)格式:
函數(shù)類型operator運(yùn)算符(形參表) {重載處理}
數(shù)據(jù)類型:是重載函數(shù)值數(shù)據(jù)類型。
operator是保留字
第24頁4.3重載運(yùn)算符規(guī)則(1)C++只允許重載已經(jīng)有運(yùn)算符。(2)不能重載運(yùn)算符有五個。(3)重載不改變操作數(shù)個數(shù)。(4)重載不改變運(yùn)算符優(yōu)先級。(5)運(yùn)算符重載函數(shù)不能帶默認(rèn)值參數(shù)。(6)運(yùn)算符重載函數(shù)參數(shù)最少有一個自定義類型,能夠是類對象或類對象引用。(7)運(yùn)算符重載函數(shù)能夠是類組員函數(shù)也能夠是類友元函數(shù),還能夠是普通函數(shù)。第25頁例4.2
classComplex {public: Complex(){real=0;imag=0;} Complex(doubler,doublei){real=r;imag=i;}//重載運(yùn)算符+
Complexoperator+(Complex&c2);//類組員函數(shù)重載運(yùn)算符 voiddisplay(); private: doublereal; doubleimag; };test14第26頁#include<iostream.h>
classComplex {public:
Complex(){real=0;imag=0;}
Complex(doubler){real=r;imag=0;}
Complex
(doubler,doublei){real=r;imag=i;}
friendComplexoperator+(Complex&c1,Complex&c2);//類友元函數(shù)重載運(yùn)算符 voiddisplay(); private: doublereal; doubleimag; };test14例4.3第27頁作業(yè)P149習(xí)題2,4第28頁第五章繼承與派生面向?qū)ο蟪绦蛟O(shè)計(jì)有四個主要特點(diǎn):
抽象(二、三章);
封裝(二、三章);
繼承(五章);
多態(tài)性(六章)。第29頁5.1繼承與派生概念√5.2派生類申明方式√5.3派生類組成√5.4派生類組員訪問屬性5.5派生類結(jié)構(gòu)函數(shù)和析構(gòu)函數(shù)5.6多重繼承第30頁繼承與派生關(guān)系
類A是已存在類,在A基礎(chǔ)上建立一個新類B:類A稱為基類或父類,類B稱作派生類或子類。子類從父類取得其已經(jīng)有特征,這種現(xiàn)象稱作類繼承。父類產(chǎn)生子類,稱作類派生。第31頁5.2派生類申明方式派生類申明格式:
class派生類名:[繼承方式]基類名
{派生類新增組員申明};繼承方式包含:public、private(系統(tǒng)默認(rèn))、protected。舉例: 已經(jīng)申明一個基類student,在它基礎(chǔ)上經(jīng)過單繼承建立一個增加了“年紀(jì)”派生類student1。第32頁5.3派生類組成派生類中組員包含從基類繼承過來組員和自己增加組員。組成部分派生類Student1組員類型接收組員數(shù)據(jù)組員num,name,sex基類組員組員函數(shù)display()//能夠重載新增組員數(shù)據(jù)組員age派生類組員組員函數(shù)display_1()結(jié)構(gòu)函數(shù)需重新定義第33頁5.5.1簡單派生類結(jié)構(gòu)函數(shù)何為簡單派生類?只有一個基類,只有一級派生;派生類數(shù)據(jù)組員中不包含基類對象(子對象)。結(jié)構(gòu)函數(shù)格式:派生類名::派生類名(基類所需形參,本類組員所需形參):基類名(基類參數(shù)表){
本類組員初始化賦值語句;};說明:基類所需形參,基類參數(shù)表一一對應(yīng)第34頁例5.5簡單派生類結(jié)構(gòu)函數(shù)#include<iostream>#include<string> usingnamespacestd;classStudent//申明基類
{public://公用部分
Student(intn,stringnam,chars)//基類結(jié)構(gòu)函數(shù)
{num=n; name=nam; sex=s;}
~Student(){}//基類析構(gòu)函數(shù)
protected://保護(hù)部分
intnum; stringname; charsex;
};test51第35頁
classStudent1:publicStudent//申明公用派生類
{public:
Student1(intn,stringnam,chars,inta,charad[]):Student(n,nam,s)
//派生類結(jié)構(gòu)函數(shù)
{age=a;//只對派生類新增數(shù)據(jù)組員初始化
addr=ad; }voidshow();
private://派生類私有部分
intage; stringaddr; };執(zhí)行結(jié)構(gòu)函數(shù)次序是(析構(gòu)函數(shù)相反):①派生類結(jié)構(gòu)函數(shù)先調(diào)用基類結(jié)構(gòu)函數(shù);②再執(zhí)行派生類結(jié)構(gòu)函數(shù)本身。即先初始化num,name,sex,然后再初始化age和addr第36頁5.6多重繼承
5.6.1申明多重繼承方法
5.6.2多重繼承派生類結(jié)構(gòu)函數(shù)
5.6.3多重繼承引發(fā)二義性問題
5.6.4虛基類為何要用多重繼承?如:定義一個沙發(fā)床類第37頁5.6.3多重繼承引發(fā)二義性問題
多重繼承最常見問題是二義性問題。
二義性問題分類:在多重繼承時(shí),基類與派生類之間,或基類之間出現(xiàn)同名組員時(shí),將出現(xiàn)訪問時(shí)二義性(不確定性)——采取同名隱藏規(guī)則(5.6.3)來處理。當(dāng)派生類從多個基類派生,而這些基類又從同一個基類派生,則在訪問此共同基類中組員時(shí),將產(chǎn)生二義性——采取虛基類(5.6.4)來處理。第38頁同名隱藏規(guī)則當(dāng)派生類與基類或基類之間有相同組員時(shí),訪問派生類中同名組員方法:派生類對象.同名組員名訪問基類中被覆蓋同名組員方法:派生類對象.基類名::同名組員名第39頁1.虛基類作用作用派生類在繼承間接共同基類時(shí)只保留一份組員,從而處理多層繼承時(shí)可能發(fā)生對同一基類繼承屢次而產(chǎn)生二義性問題。申明
class派生類名:virtual繼承方式基類名,如:classA:virtualpublicN注意在第一級繼承時(shí)就要將共同基類設(shè)計(jì)為虛基類第40頁
類繼承舉例1:
classN
{public: inta; Voiddisplay() {cout<<“N::a=“<<a;} };圖5.18
5.6.4虛基類第41頁作業(yè)P193習(xí)題4,5,7①,8①第42頁第六章多態(tài)性與虛函數(shù)
6.1多態(tài)性概念
6.2一個經(jīng)典例子
6.3虛函數(shù)√
6.4純虛函數(shù)與抽象類第43頁虛函數(shù)作用虛函數(shù)突破了基類限制,在基類指針指向派生類對象后,就能調(diào)用派生類虛函數(shù)。從而實(shí)現(xiàn)了用同一個調(diào)用形式(如:pt->display(),pt是一個基類指針),能夠調(diào)用同一類族中不一樣類虛函數(shù)。這就是多態(tài)性,對同一消息,不一樣對象有不一樣響應(yīng)方式。第44頁
(1)在基類用virtual申明組員函數(shù)為虛函數(shù)。在派生類中重新定義同名函數(shù),讓它含有新功效。
(2)在派生類中重新定義此函數(shù)時(shí),要求函數(shù)名、函數(shù)類型、參數(shù)個數(shù)和類型與基類虛函數(shù)相同,依據(jù)需要重新定義函數(shù)體。C++要求,當(dāng)一個組員函數(shù)被申明為虛函數(shù)后,其派生類中同名函數(shù)自動成為虛函數(shù)。
(3)定義一個指向基類對象指針變量,并讓它取得同一類族中某個對象地址。
(4)用該指針變量調(diào)用虛函數(shù),調(diào)用就是該對象所屬類虛函數(shù)。虛函數(shù)使用方法第45頁例:虛函數(shù)使用方法#include<string>#include<iostream>usingnamespacestd;classbase{public:
virtualvoidFn(){cout<<“在基類內(nèi)”<<endl;}};classsubclass:publicbase{public:
virtualvoidFn(){cout<<“在派生類內(nèi)”<<endl;}};test20第46頁voidtest(base&b){b.Fn();}intmain(){basebc;subclasssc;base*bsc=&bc;//目檢測指針對象與虛函數(shù)共同作用效果bc=sc;//目檢測一般對象與虛函數(shù)共同作用效果cout<<"n執(zhí)行bc=sc后,調(diào)用test(bc)\n";test(bc);cout<<"\n調(diào)用test(bsc)\n";test(*bsc);bsc=≻//目檢測指針對象與虛函數(shù)共同作用效果cout<<"執(zhí)行bsc=&sc后,調(diào)用test(bsc)\n";test(*bsc);return0;}第47頁運(yùn)行結(jié)果:n執(zhí)行bc=sc后,調(diào)用test(bc)在基類內(nèi)調(diào)用test(bsc)在基類內(nèi)執(zhí)行bsc=&sc后,調(diào)用test(bsc)在派生類內(nèi)Pressanykeytocontinue指針虛函數(shù)+=動態(tài)多態(tài)性第48頁6.4純虛函數(shù)與抽象類6.4.1純虛函數(shù)6.4.2抽象類6.4.3應(yīng)用實(shí)例第49頁6.4.1純虛函數(shù)何為純虛函數(shù)只申明,不定義虛函數(shù)稱為純虛函數(shù)純虛函數(shù)普通格式virtual函數(shù)類型函數(shù)名(參數(shù)表)=0;純虛函數(shù)作用在許多情況下,基類中不能為虛函數(shù)給出一個有意義定義,而將它說明為純虛函數(shù),其作用是:為派生類提供一個一致接口(界面)。它定義留給派生類來做,派生類依據(jù)需要來定義各自實(shí)現(xiàn)。第50頁6.4.2抽象類何為抽象類帶有純虛函數(shù)類是抽象類抽象類任務(wù)普通只描述這組子類共同操作接口,而完整實(shí)現(xiàn)留給子類。抽象類說明抽象類是一個特殊類,只能用作其它類基類,抽象類是不能定義對象。第51頁作業(yè)P219習(xí)題2,3第52頁7.1
C++輸入和輸出7.2
標(biāo)準(zhǔn)輸出流√7.3
標(biāo)準(zhǔn)輸入流√7.4文件操作與文件流7.5字符串流
第七章輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保設(shè)備安裝承包合同樣本4篇
- 2025年個人創(chuàng)業(yè)風(fēng)險(xiǎn)投資合同范本3篇
- 二零二五版模具維修保養(yǎng)與質(zhì)量保障合同3篇
- 2020-2025年中國山蒼子油行業(yè)競爭格局分析及投資規(guī)劃研究報(bào)告
- 2025年個人黑色奔馳豪華車型租賃合同4篇
- 2025年度個人住宅門窗安裝質(zhì)量保證合同3篇
- 二零二五年度農(nóng)藥生產(chǎn)許可證申請代理合同4篇
- 2025年度頁巖磚建筑一體化應(yīng)用供應(yīng)合同4篇
- 2025年度拆除工程房屋安全評估及施工監(jiān)管合同3篇
- 2025年度門窗定制項(xiàng)目融資租賃合同4篇
- 無人化農(nóng)場項(xiàng)目可行性研究報(bào)告
- 《如何存款最合算》課件
- 社區(qū)團(tuán)支部工作計(jì)劃
- 拖欠工程款上訪信范文
- 2024屆上海市金山區(qū)高三下學(xué)期二模英語試題(原卷版)
- 學(xué)生春節(jié)安全教育
- 《wifi協(xié)議文庫》課件
- 《好東西》:女作者電影的話語建構(gòu)與烏托邦想象
- 教培行業(yè)研究系列(七):出國考培的再研究供需變化的新趨勢
- GB/T 44895-2024市場和社會調(diào)查調(diào)查問卷編制指南
- 道醫(yī)館可行性報(bào)告
評論
0/150
提交評論