版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
面向?qū)ο蟪绦蛟O計C++程序設計語言主講:陳澤琳C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第1頁。學時安排:上課學時:24
上機學時:16參考資料:(美)H.M.Deitel等著,薛萬鵬等譯,“C++程序設計教程”鄭莉等編著,“C++語言程序設計”錢能主編,“C++程序設計教程”劉路放編著,“VisualC++與面向?qū)ο蟪绦蛟O計教程”杜建成等編著,“C++簡明教程”...C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第2頁。課程學習的目標:學習C++程序設計語言,掌握面向?qū)ο蟪绦蛟O計方法。課程學習的要求:預習,通過例子了解概念,編程上機實踐。C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第3頁。課程大綱:1.類(Class)2.構(gòu)造函數(shù)和析構(gòu)函數(shù)(Constructor&Destructor)3.靜態(tài)成員和友元(StaticMember&Friends)4.繼承與多態(tài)性(Inheritance&Polymorphism)5.運算符重載(OperatorOverloading)6.I/O流與文件(I/OStream&File)7.模板(Template)、異常處理8.MFC類庫及程序框架9.面向?qū)ο蟪绦蛟O計(Object-orientedprogramming)C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第4頁。C程序復習(函數(shù)、參數(shù)、指針、引用、執(zhí)行過程與程序)講課內(nèi)容的一點說明:
書的內(nèi)容寫的很細,講課時先講主要內(nèi)容,
通過例子理解,在此過程中主要學習編程序,
最后再補充C++的細節(jié)規(guī)則。課件中的約定:
基礎內(nèi)容 重點內(nèi)容* 難點內(nèi)容** 需要注意的內(nèi)容#
應多練習的內(nèi)容##C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第5頁。1.類(class)1.1類的概念面向?qū)ο蟪绦蛟O計問題:(例1-1)編寫一個時鐘的程序,程序可以設置時、分、秒,可以判斷設置的時間是否合理(時:0-23,分:0-59,秒:0-59),顯示時間。
什么是類?
類是一種用戶定義的數(shù)據(jù)類型C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第6頁。C語言程序(結(jié)構(gòu)化程序設計方法):#include<iostream.h>structTime{ inthour;
intminute;
intsecond;};structTimestandard_time;main(){ set_time(18,20,30); show_time();}voidset_time(inth,intm,ints){ standard_time.hour=(h>=0&&h<24)?h:0; standard_time.minute=(m>=0&&m<60)?m:0; standard_time.second=(s>=0&&s<60)?s:0;}voidshow_time(){cout<<standard_time.hour<<":"<<standard_time.minute<<":"<<standard_time.second<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第7頁。C++語言程序(面向?qū)ο蟪绦蛟O計)#include<iostream.h>classTime{
private: inthour; intminute; intsecond;
public:
voidset_time(int,int,int); voidshow_time();};voidTime::set_time(inth,intm,ints){ hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0;}voidTime::show_time(){cout<<hour<<":"<<minute<<":"<<second<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第8頁。Timestandard_time;main(){
standard_time.set_time(18,20,30);
standard_time.show_time();}
看上去只是寫法不同,實際上在面向?qū)ο蟪绦蛟O計中,class,set_time(),show_time()是一個整體,是可以獨立于main()主函數(shù),也可以看成是對象的描述(注意這里的對象與后面要講的對象一詞意思不同,以后會詳細介紹),即面向?qū)ο蟆6Y(jié)構(gòu)化程序設計中,只能將問題劃分為一個個函數(shù)模塊,哪些函數(shù)模塊可以描述一個子問題或一個對象,程序中無法表示。因此以上兩個程序是有本質(zhì)區(qū)別的,面向?qū)ο蟪绦蛟O計可以將描述完整的子問題提供給他人,同時還能保護自己的程序不被他人亂改,多個面向?qū)ο笞映绦蜻€可以象搭積木一樣組合成大的面向?qū)ο蟪绦?程序設計可以象生產(chǎn)汽車標準零件一樣形成大規(guī)模生產(chǎn),而這些在結(jié)構(gòu)化程序設計中都很難做到。C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第9頁。為什么用類:可以實現(xiàn)面向?qū)ο蟮某绦蛟O計即代碼可以重用并受到保護類是實現(xiàn)面向?qū)ο蟪绦蛟O計的基本工具下面我們一步步地介紹關于類的定義、用類進行面向?qū)ο蟪绦蛟O計的方法C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第10頁。class類名
{
數(shù)據(jù)成員(datamembers);...
成員函數(shù)(memberfunctions);};類的定義:C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第11頁。class
類名
{
public:
公有段成員;protected:
保護段成員;
private:
私有段成員;};C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第12頁。面向?qū)ο蟪绦蛟O計說明:1.類名的第一個字母一般大寫;2.無論是數(shù)據(jù)成員,還是成員函數(shù),都可用三個訪問控制關鍵字說明:public、protected、private;3.默認情況是private;4.說明為private的數(shù)據(jù)成員,其他對象不可訪問的;5.類是一種類型的定義,不分配存儲空間;C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第13頁。再看一個例子:(例1-2)描述人的信息:姓名、出生日、籍貫等其成員函數(shù)有:設置姓名、出生日、籍貫等; 顯示姓名、出生日、籍貫等如要增加人的其他信息,學歷、黨派等,可以在類中 增加這些數(shù)據(jù)成員;還可以增加處理 這些數(shù)據(jù)成員的成員函數(shù)C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第14頁。classHuman{public:
Human();
display();
private:
charname[10];
struct{ intyear;
intmonth;
intdate;
}birthday;
charhistory[20];};C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第15頁。有成員函數(shù)和無成員函數(shù);成員的隱蔽和成員的公開;類與結(jié)構(gòu)的區(qū)別:C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第16頁。如何定義類成員:數(shù)據(jù)成員;成員函數(shù)的聲明 聲明(或說明) 定義說明:1.所有類定義中聲明的成員函數(shù)都要定義其成員函數(shù)的實現(xiàn);2.在類中定義成員函數(shù),默認為內(nèi)聯(lián)函數(shù);(小函數(shù),執(zhí)行效率高);3.在類之外定義成員函數(shù),函數(shù)名必須為類名::成員函數(shù)名()4.非成員函數(shù)的全稱為::函數(shù)名
(不會引起出錯時可省略::)1.2類成員的定義::稱為作用域運算符C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第17頁。例1-3(在類的內(nèi)部定義成員函數(shù))#include<iostream.h>classTime{ public: voidset_time(inth,intm,ints) { hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0; } voidshow_time() { cout<<hour<<":"<<minute<<":"<<second<<endl; } protected: inthour; intminute; intsecond;};C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第18頁。(在類的外部定義成員函數(shù))#include<iostream.h>classTime{ public: voidset_time(int,int,int); voidshow_time(); protected: inthour; intminute; intsecond;
};voidTime::set_time(inth,intm,ints){ hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0;}voidTime::show_time(){cout<<hour<<":"<<minute<<":"<<second<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第19頁。類成員的保護:(即對象成員的訪問限制)類成員為public,則任何函數(shù)可以訪問,提供給外部的接口;
為protected,則自己類的成員函數(shù)和派生類的成員函數(shù)可以訪問;
為private,則只能被自己類的成員函數(shù)訪問。注:訪問包括賦值和引用,a.birthday.year=1998;cout<<成員訪問說明符:public:、protected:、private:C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第20頁。
除了全局變量賦初值,C及C++的變量訪問都是在函數(shù)中完成的
類的數(shù)據(jù)成員的訪問也是在成員函數(shù)或一般函數(shù)中完成的(一般函數(shù)只能訪問public數(shù)據(jù))函數(shù)中訪問數(shù)據(jù)(類的數(shù)據(jù)成員)函數(shù)調(diào)用函數(shù)C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第21頁。例1-4classTest{public: voidputpuba(int); intpuba;protected: voidputproa(int); intproa;private: voidputpria(int); intpria;};C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第22頁。voidTest::putpuba(inta){ puba=a; proa=a; pria=a; cout<<"inputpuba()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //類成員函數(shù)可以訪問自己的保護成員和私有成員
putproa(a+1); putpria(a+2);cout<<"endofputpuba()"<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第23頁。voidTest::putproa(inta){ puba=a; proa=a; pria=a; cout<<"inputproa()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //訪問自己的私有成員
putpria(a+3);cout<<"endofputproa()"<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第24頁。voidTest::putpria(inta){ puba=a; proa=a; pria=a; cout<<"inputpria()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //訪問自己的保護成員putproa()中的putpria()與下一函數(shù)調(diào)用
//只能執(zhí)行一個,否則循環(huán)調(diào)用
//putproa(a+1); cout<<"endofputpria()"<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第25頁。voidmain(){ inta=1,b=2,c=3; Testobj; obj.puba=10;cout<<"inmain(),puba="<<obj.puba<<endl; //a=20;error:proaisprotectedmember //obj.pria=30;error:priaisprivatemember obj.putpuba(a); //obj.putproa(b);error:putproa()isprotectedmember //obj.putpria(c);error:putpria()isprivatemember cout<<"end"<<endl;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第26頁。
類定義的public段是類的對外接口,可以被外部訪問,而protected可以被派生類訪問。若類需修改,只需修改類的內(nèi)部程序和保護或私有數(shù)據(jù),而類的對外接口不變,即公共成員函數(shù)的功能、名字、參數(shù)不變,則不需改外部應用程序。類成員保護的好處:
由此可以建立搭建應用程序的基礎塊,這些塊是通用的和安全的例子見書p250-251C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第27頁。問題:類中定義的public數(shù)據(jù)成員與全局變量的區(qū)別?不同之處:若類的對象是全局的,則訪問都是整個程序但類的public數(shù)據(jù)成員要通過對象訪問類中成員:每定義一個對象則生成一個該成員的變量全局變量只有一個作用域:類中成員:由對象變量的作用域決定全局變量:整個程序C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第28頁。什么是對象:對象是類類型的變量。類成員protected:public:private:定義對象時,為每個數(shù)據(jù)成員分配空間,為每個成員函數(shù)建立入口地址(即函數(shù)指針、函數(shù)參數(shù)和函數(shù)返回值)this*1.3對象通過對象訪問類的成員人、車、動物等是一些抽象的概念,每個抽象的概念有它的特征,這就好像是類。對象是抽象類的實例,即當變量存放一個值時,這個值就是一個特定的人或車或動物等,不再是抽象的概念了。C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第29頁。例1-5//本文件名為class1.h (關于多文件編譯,見上機指導)classHuman{public: voidassignhuman(char*,char*,char*);//賦予對象屬性
voiddisplay(); //顯示某個人的信息
intupdatecorp(char*corperation);//修改某個人的工作單位protected: charname[40];//存放姓名的數(shù)組
struct{ intyear; intmonth; intdate; }birthday;//存放生日的結(jié)構(gòu)型變量
charcorperation[100];//存放工作單位的數(shù)組};C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第30頁。//本文件名為class1.cpp#include<iostream.h>#include<string.h>#include<stdlib.h> //atoi()#include"class1.h"voidHuman::assignhuman(char*np,char*bp,char*cp){ chartemp[5]; strcpy(name,np); strncpy(temp,bp,4);temp[4]='\0'; birthday.year=atoi(temp); strncpy(temp,bp+5,2);temp[2]='\0'; birthday.month=atoi(temp); strncpy(temp,bp+8,2);temp[2]='\0'; birthday.date=atoi(temp); strcpy(corperation,cp);}voidHuman::display(){ cout<<"Apersoninfo:"<<endl; cout<<name<<""<<birthday.year<<'/'<<birthday.month<< '/'<<birthday.date<<""<<corperation<<endl;}intHuman::updatecorp(char*cp){ strcpy(corperation,cp); return0;}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第31頁。//本文件名為main.cpp#include<iostream.h>#include<string.h>#include<stdlib.h> #include"class1.h"voidmain(){Humanzhang;Humanclassmates[10];inti;charname[20],birthday[11],corp[50];zhang.assignhuman("zhangming","1972/10/12","SCUT");zhang.display();(接下一頁)name:birthday:corperation:zhangname:birthday:corperation:name:birthday:corperation:…name:birthday:corperation:classmanes[0]classmanes[1]classmanes[9]iname[0-19]birthday[0-10]corp[0-49]對象存儲空間分配示意圖:C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第32頁。 for(i=0;i<2;i++){ cout<<"Pleaseinputapersoninfo:name,birthday,corperation"<<endl; cin>>name>>birthday>>corp; cout<<name<<""<<birthday<<""<<corp<<endl; if(!strchr(birthday,‘/’)) //檢查輸入的生日中是否包含‘/’ cout<<"Inputerror."<<endl; else
classmates[i].assignhuman(name,birthday,corp); } for(i=0;i<2;i++)
classmates[i].display();
classmates[1].updatecorp("HP");
classmates[1].display();}(接上一頁)說明:對象zhang,調(diào)用成員函數(shù)賦值并顯示;
對象數(shù)組classmates[10],調(diào)用成員函數(shù)賦值并顯示C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第33頁。調(diào)用成員函數(shù):對象名.成員函數(shù)名();引用對象名.成員函數(shù)名();對象指針->成員函數(shù)名();不同類的成員函數(shù)可同名,實際為不同的函數(shù)普通函數(shù)的調(diào)用與在C語言中的調(diào)用相同
見例子1-6中的readpeople()可替換為display()C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第34頁。例1-6//用引用調(diào)用成員函數(shù)#include<iostream.h>#include<string.h>#include<stdlib.h>#include"class1.h"voidreadhuman(Human&);//是普通函數(shù)的聲明voidmain(){ Humanzhang; Humanclassmates[10]; inti; zhang.assignhuman("zhangming","1972/10/12","SCUT"); zhang.display(); cout<<<<endl;//!!該語句是錯誤的,因數(shù)據(jù)成員name是被保護的
//!!不能在普通函數(shù)中訪問
for(i=0;i<2;i++) readpeople(classmates[i]);//調(diào)用函數(shù)readpeople(classmates[i]) for(i=0;i<2;i++) classmates[i].display(); classmates[1].updatecorp("HP"); classmates[1].display();}C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第35頁。voidreadpeople(Human&pp)//pp是引用類型,即對象的別名{ charname[20],birthday[11],corp[50]; cout<<"Pleaseinputapersoninfo:name,birthday,corperation"<<endl; cin>>name>>birthday>>corp; cout<<name<<""<<birthday<<""<<corp<<endl; if(!strchr(birthday,'/')) cout<<"Inputerror."<<endl; else
pp.assignhuman(name,birthday,corp); //用引用調(diào)用成員函數(shù)}readpeople(Human&)可改名為display(Human&)C語言面向?qū)ο蟪绦蛟O計1全文共41頁,當前為第36頁。例1-7//用對象指針調(diào)用成員函數(shù)#include<iostream.h>#include<string.h>#include<stdlib.h>#include"class1.h"voidreadpeople(Human*); //普通函數(shù)聲明;參數(shù)為指向Human類的指針voidmain(){ Humanzhang; Humanclassmates[10]; inti; zhang.assignhuman("zhangming","1972/10/12","SCUT"); zhang.display(); for(i=0;i<2;i++) readpeople(&classmates[i]); for(i=0;i<2;i++) classmates[i].display(); classmates[1].updatecorp("HP");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度木材運輸碳排放交易合作合同4篇
- 2025年度個人藝術品投資收藏合同4篇
- 吉林省長春市凈月實驗中學2024-2025學年九年級上學期期末化學試題(含答案)
- 園區(qū)物業(yè)服務質(zhì)量提升考核試卷
- 2025版微信公眾號內(nèi)容版權授權與運營維護服務合同3篇
- 原材料卸車作業(yè)中安全生產(chǎn)獎勵制度合同3篇
- 2025年代理經(jīng)銷銷售合同
- 2025年農(nóng)產(chǎn)品合同模板
- 2025年合資合約示范
- 二零二五年度貴州事業(yè)單位合同制工人聘用協(xié)議3篇
- 2025水利云播五大員考試題庫(含答案)
- 中藥飲片驗收培訓
- 手術室專科護士工作總結(jié)匯報
- DB34T 1831-2013 油菜收獲與秸稈粉碎機械化聯(lián)合作業(yè)技術規(guī)范
- 創(chuàng)傷處理理論知識考核試題及答案
- 2019級水電站動力設備專業(yè)三年制人才培養(yǎng)方案
- 肝素誘導的血小板減少癥培訓課件
- 抖音認證承諾函
- 高等數(shù)學(第二版)
- 四合一體系基礎知識培訓課件
- ICD-9-CM-3手術與操作國家臨床版亞目表
評論
0/150
提交評論