C++面向?qū)ο蟪绦蛟O(shè)計-期末知識總結(jié)_第1頁
C++面向?qū)ο蟪绦蛟O(shè)計-期末知識總結(jié)_第2頁
C++面向?qū)ο蟪绦蛟O(shè)計-期末知識總結(jié)_第3頁
C++面向?qū)ο蟪绦蛟O(shè)計-期末知識總結(jié)_第4頁
C++面向?qū)ο蟪绦蛟O(shè)計-期末知識總結(jié)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第第頁C++面向?qū)ο蟪绦蛟O(shè)計--期末知識總結(jié)本次學習涵蓋了八個章節(jié)的知識點,認識了面向?qū)ο蟮幕静僮?,會做一些簡單的小系統(tǒng),比以往更廣泛地了解了C++語言。首先是主要的知識點介紹,最后是我的一些學習感想。關(guān)于知識結(jié)構(gòu),我想把類和對象的定義放在前面對象:是應用領(lǐng)域中明確角色的實體,有狀態(tài)、行為和標識。類:為描述一組對象在結(jié)構(gòu)和行為上的共性,可以創(chuàng)建抽象數(shù)據(jù)類型,對一組具有相同結(jié)構(gòu)和行為的對象的抽象描述,大致分為屬性、操作。一、指針和引用(一)指針的特點指針持有一個對象的地址,稱為指針“指向”該對象;通過指針可以間接操縱它指向的對象。(二)定義指針變量的語法類型指針變量;每個指針都有相關(guān)的類型,要在定義指針時指出,例如:intpi;(三)取地址運算符“&”指針存放指定類型對象的地址,要獲取對象的地址,使用取地址運算符“&”。intival=120;int*pi=&ival;//pi存放int變量ival的地址//或者說pi指向ivalcharch=‘a(chǎn)’,*pc=&ch;//pc指向字符型變量ch(四)const限定指針指向const對象的指針(非const):consttypecp;或者typeconstcp;cp是指向常量的指針,它所指向的內(nèi)存中的內(nèi)容不可以改變,即cp的值不能改變。指向非const對象的const指針:typeconstcp=initAddressValue;cp是常量指針,初始化后值不能改變,指向固定的單元。二、結(jié)構(gòu)體和string(一)結(jié)構(gòu)體結(jié)構(gòu)體把一組來自不同類型的數(shù)據(jù)組合在一起構(gòu)成復合類型,其中的每個數(shù)據(jù)都是結(jié)構(gòu)體的成員。結(jié)構(gòu)體由關(guān)鍵字struct定義,語法形式:struct結(jié)構(gòu)體類型名{成員聲明;};結(jié)構(gòu)體的成員不能獨立使用,必須由結(jié)構(gòu)體類型的變量通過成員選擇運算符“.”來選擇,或者由結(jié)構(gòu)體類型的指針通過“->”運算符選擇。結(jié)構(gòu)體默認數(shù)據(jù)類型、成員函數(shù)為公有。(二)標準庫類型stringstring表示可變長度的字符序列字符串是對象,使用string類時要包含頭文件string類的功能大致如下:1、各種初始化方式2、字符串之間的復制、比較、連接3、查詢字符串長度和判斷字符串是否為空4、訪問字符串中的單個字符String可以看作是字符串數(shù)組,可通過遍歷讓其輸出全部字符串,如:cout<<“Lengthofs1is:”<<s1.size()<<endl;//逐個輸出s1中的字符for(size_ti=0;i<s1.size();++i)cout<<s1[i]<<"“;關(guān)于String的讀寫,這里主要介紹兩種方法:while(cin)和getline()函數(shù)1、//讀取輸入流中的單詞,直到文件結(jié)束,即遇到空格返回循環(huán)stringword;while(cin>>word)cout<<word<<endl;2、//每次讀取一行文本,直到文件結(jié)束stringline;while(getline(cin,line))cout<<line<<endl;獲取string對象的長度:函數(shù).size()或者.length()判斷stirng對象是否為空:stringObj.empty();比較string對象:可以用關(guān)系運算符比較兩個字符串對象兩個string相等意味著它們的長度相同,并且所包含的字符也完全相同,字符串的大小關(guān)系依照字典順序定義且區(qū)分大小寫字母。strings1=“hello”;strings2=“helloworld”;//s2>s1strings3=“Hello”;//s3<s1,s3<s2(三)標準庫類型vector1、vector的特點:表示對象的集合,其中所有對象的類型都相同,可以通過索引訪問各個對象;vector是對象,其中容納著其他對象,被稱為容器。2、vector的用法:vector是長度可變的向量,可替代內(nèi)置數(shù)組,要使用vector,必須包含頭文件。3、定義和初始化vector://列表初始化vectorsvec1{“how”,“are”,“you”};//3個元素vectorsvec2(“how”,“are”,“you”);//錯誤:括號//創(chuàng)建指定數(shù)量的元素vectorivec(10,1);//ivec包含10個int元素都初始化為1vectorsvec(10,“hi”);//10個string對象"hi”//值初始化vectorivec(10);//ivec包含10個int元素都初始化為0vectorsvec(10);//svec包含10個string對象,默認為空4、在vector中添加和刪除元素vector的大小可以動態(tài)變化,并且可以在初始化時指定vector對象的大小和初始值;常見用法是創(chuàng)建一個空vector,根據(jù)需要動態(tài)添加元素。增加:push_back()將一個值添加到vector的末尾,并使vector的大小增加刪除:pop_back()刪除vector對象末尾的元素(四)迭代器1、定義:迭代器類似于指針類型,提供對對象的間接訪問,在容器或string對象上使用,指向的對象是容器中的元素或string中的字符。訪問標準容器的元素的通用方法是使用迭代器;可以訪問容器中的某個元素,也可以在容器上移動。標準庫容器迭代器的類型:iterator、const_iterator2、begin()和end()begin()返回指向第一個元素或字符的迭代器end()則返回指示容器或string的最后一個元素的下一個位置的迭代器begin()返回指向第一個元素或字符的迭代器end()則返回指示容器或string的最后一個元素的下一個位置的迭代器(五)文件流具體步驟:(1)新建一個文件流對象讀文件用ifstream,寫文件用ofstream;(2)把文件流對象和文件關(guān)聯(lián)起來打開文件,使用文件流的open函數(shù);可以指定打開文件的模式(3)操作文件流使用與終端I/O相同的操作讀寫文件(4)關(guān)閉文件流使用文件流的close函數(shù)三、函數(shù)(一)基本定義函數(shù)是一個命名的代碼塊,通過調(diào)用函數(shù)可以執(zhí)行相應的代碼,用來實現(xiàn)各種算法,完成特定的任務。包括庫函數(shù),程序員自定義的函數(shù)。C++程序由函數(shù)構(gòu)成,函數(shù)之間通過傳遞參數(shù)和返回值進行通信。函數(shù)定義的語法形式為:返回類型函數(shù)名(參數(shù)列表){函數(shù)體}返回類型為void無需返回內(nèi)容。(二)參數(shù)傳遞參數(shù)傳遞是指用函數(shù)調(diào)用的實參來初始化函數(shù)形參存儲區(qū)的過程。1、按值傳遞把實參的值復制到形參的存儲區(qū)中,即用實參值初始化形參。inttest(intleft,intright){returnleft+right;}intmain(){intlval=2;intrval=3;intresult=test(lval,rval);}2、Const使用const限定可以避免實參被修改(三)函數(shù)重載如果同一個作用域內(nèi)的幾個函數(shù)名字相同但形參列表不同,則它們是重載函數(shù),調(diào)用重載函數(shù)時,編譯器會根據(jù)實參的類型推斷出要調(diào)用的是哪個函數(shù)。voidprint(constintb,constinte){…}voidprint(constintia[],size_tsize){…}voidprint(constcharcp){…}intarr[5]={1,2,3,4,5};print(“Hello!”);//調(diào)用print(constchar)print(arr,5);//調(diào)用print(constint,size_t)print(begin(arr),end(arr));//調(diào)用print(constint,constint)(四)作用域和存儲類別1、對象的生存期:是指程序執(zhí)行過程中對象存在的時間,對象的生存期與對象的作用域和存儲類別密切相關(guān)。2、名字的作用域:程序的一段區(qū)域,名字的作用域指的是該名字可以在哪些程序文本區(qū)使用。3、對象的存儲類別:創(chuàng)建對象時分配內(nèi)存空間的方式和內(nèi)存空間的類型。C++程序中對象的存儲類別有靜態(tài)存儲、自動存儲、動態(tài)存儲。四、類與對象對象是數(shù)據(jù)和操作的封裝體;將數(shù)據(jù)和操作捆綁在一起,并加上訪問控制,稱為封裝.數(shù)據(jù)描述對象的屬性,操作描述對象的行為。(一)訪問控制和封裝信息和實現(xiàn)隱藏:控制對類中不同成員的訪問,對客戶程序員隱藏實現(xiàn)信息,客戶程序員只對類的接口編程,C++通過限定成員的訪問權(quán)限來實現(xiàn)信息隱藏(二)訪問限定符關(guān)鍵字public、private和protected被稱為訪問限定符訪問限定符在類定義中使用,一般語法為struct類名{public:公有成員聲明;private:私有成員聲明;protected:被保護成員聲明;};增加了成員訪問限定的類,內(nèi)部的安全性與一致性加強,降低了客戶程序員操縱該類型的復雜程度,只使用public部分提供的操作,不需了解類的內(nèi)部表示,類設(shè)計者改變類的內(nèi)部工作方式時客戶程序不受影響。只要public部分的聲明沒有改變,則不會影響之前使用該類的客戶程序代碼。C++引入了一個關(guān)鍵字class來定義類class和struct定義的類稍有區(qū)別如果class的成員沒有設(shè)置訪問限定符,則默認為private(三)訪問器和修改器將數(shù)據(jù)成員限定為private,并提供public成員函數(shù)來對其進行訪問,這種成員函數(shù)被稱為訪問器(accessor)和修改器(mutator)常以一對getX()和setX()函數(shù)的形式出現(xiàn)一對重載函數(shù)的形式,如坐標點的x軸數(shù)據(jù)int_x;intx();voidx(intnewX);對bool成員,如電視機是否打開的數(shù)據(jù)boolpowerOn;boolon();voidturnOn();voidturnOff();與直接訪問數(shù)據(jù)成員相比,訪問器和修改器更好地體現(xiàn)了封裝性可以在修改器中進行數(shù)據(jù)有效性的驗證,從而確保對象不會因外部修改而處于無效的狀態(tài)(四)this指針每個成員函數(shù)都有一個隱含的參數(shù),指向接收消息的對象,稱為this指針,X類的this指針的類型是X;this指針是一個常量,含有當前實施調(diào)用的對象的地址。不能改變this指針的值,也不能取this指針的地址。五、對象的初始化、復制和銷毀(一)對象的初始化1、默認初始化如果定義對象時沒有指定初值,對象被默認初始化,調(diào)用類中的默認構(gòu)造函數(shù)。2、直接初始化使用等號“=”,容易和賦值混為一談賦值和初始化不同,是對已經(jīng)存在的對象進行的,含義是清除對象當前的值,寫入新的值來代替3、拷貝初始化用等號“=”初始化一個對象時,執(zhí)行拷貝初始化,編譯器用等號右邊的初始值創(chuàng)建一個對象,復制給新創(chuàng)建的對象等號右邊的初始值只能有一個,調(diào)用與初始值類型匹配的構(gòu)造函數(shù)4、列表初始化用花括號“{}”中的初始值構(gòu)造對象,調(diào)用相應的構(gòu)造函數(shù),與直接初始化類似花括號可以是初始值列表,用來初始化數(shù)組的每個元素此時對每個值調(diào)用構(gòu)造函數(shù),創(chuàng)建數(shù)組元素如果初始值的個數(shù)少于數(shù)組大小,對后面的元素調(diào)用默認構(gòu)造函數(shù)初始化(二)默認構(gòu)造函數(shù)可不提供實參就能調(diào)用的構(gòu)造函數(shù)稱為默認構(gòu)造函數(shù)例如,HaveAll()是HaveAll類的默認構(gòu)造函數(shù)在定義對象時如果沒有提供初始值,或不便提供初始值時,調(diào)用默認構(gòu)造函數(shù)進行初始化Xax[100];需要調(diào)用X()來初始化數(shù)組的每個元素默認構(gòu)造函數(shù)可以是沒有形參的構(gòu)造函數(shù)(三)析構(gòu)函數(shù)對象離開作用域時析構(gòu)函數(shù)會被自動調(diào)用同一作用域的對象析構(gòu)函數(shù)的調(diào)用次序和構(gòu)造函數(shù)的調(diào)用次序相反(四)拷貝構(gòu)造函數(shù)Xone;Xtwo(one);//用one初始化同類型對象two用one初始化two時需要構(gòu)造函數(shù)X(X&),稱為拷貝構(gòu)造函數(shù)如果在類中沒有定義這樣的構(gòu)造函數(shù),編譯器會自動合成一個,默認的行為是逐個成員復制Xtwo(one)就是用one中的每個成員分別去初始化two的每個對應的成員,這種行為也稱為淺復制。六、運算符重載(一)基本概念運算符重載:將運算符看作是一種特殊的函數(shù),操作數(shù)是函數(shù)的參數(shù),運算結(jié)果是函數(shù)的返回值。如果運算符被看作是函數(shù),自然也可以像函數(shù)一樣重載,已見過的運算符重載現(xiàn)象;移位運算符>>和<<,用作流輸入和輸出運算符。重載的運算符:定義重載運算符和定義普通函數(shù)類似,函數(shù)名由關(guān)鍵字operator和其后要定義的運算符組成。例如:operator=,operator<<,operator+返回類型:運算結(jié)果的類型參數(shù)表:提供參與運算的操作數(shù);參數(shù)個數(shù)取決于運算符的操作數(shù)個數(shù)和運算符函數(shù)是成員函數(shù)還是非成員函數(shù)。函數(shù)體:進行運算,返回運算結(jié)果,即表達式的值。(二)常用運算符的重載用成員函數(shù)重載一元運算符用非成員函數(shù)重載一元運算符注意:對于類類型的參數(shù),如果僅僅只是讀參數(shù)的值,而不改變參數(shù),應該作為const引用來傳遞。普通算術(shù)運算符、關(guān)系運算符、邏輯運算符都不會改變參數(shù),所以以const引用作為參數(shù)傳遞方式。當運算符函數(shù)是類的成員函數(shù)時,就將其定義為const成員函數(shù)。七、組合與繼承(一)組合將一個類的對象作為另一個類的成員,被稱作組合或包含。classEngine{…};classWheel{…};classCar{Enginee;Wheelwheels[4];//…};注意:成員對象是組合對象的一部分,隨著組合對象的創(chuàng)建而創(chuàng)建,隨著組合對象的撤銷而撤銷。成員對象不作為獨立元素對外部展現(xiàn)。(二)繼承繼承:在已有類的基礎(chǔ)上創(chuàng)建新類的過程,比方說:一個B類繼承A類,或稱從類A派生類B。被繼承的已有類稱為基類;繼承得到的新類稱為派生類;派生類可以再被繼承,這樣構(gòu)成的層次結(jié)構(gòu)稱為繼承層次。語法舉例:某大學的學生管理程序中可能有如下的學生類studentclassstudent{stringname;intstudent_id;stringdepartment;public:student(stringnm,intid,stringdp);voidprint()const;};如果對研究生還要處理更多的信息,例如論文題目,student類型就不能滿足需要??梢灾匦露x研究生類如下:classgrad_student{stringname;intstudent_id;stringdepartment;stringthesis;public:grad_student(stringnm,intid,stringdp,stringth);voidprint()const;};類繼承關(guān)系的語法形式class派生類名:基類名表{數(shù)據(jù)成員和成員函數(shù)聲明};基類名表構(gòu)成訪問控制基類名1,訪問控制基類名2,…,訪問控制基類名n訪問控制表示派生類對基類的繼承方式,使用關(guān)鍵字:public公有繼承private私有繼承protected保護繼承(三)重名人員派生類定義了與基類同名的成員,在派生類中訪問同名成員時屏蔽了基類的同名成員。在派生類中使用基類的同名成員,顯式地使用類名限定符:類名::成員voidprintAB(){A::print();//派生類對象調(diào)用基類版本同名成員函數(shù)print();//派生類對象調(diào)用自身的成員函數(shù)}};intmain(){Bb;b.A::print();b.printAB();}(四)派生類中訪問靜態(tài)成員基類定義的靜態(tài)成員,將被所有派生類共享(基類和派生類共享基類中的靜態(tài)成員),根據(jù)靜態(tài)成員自身的訪問特性和派生類的繼承方式,在類層次體系中具有不同的訪問性質(zhì)。派生類中訪問靜態(tài)成員,用以下形式顯式說明:類名::成員或通過對象訪問對象名.成員(五)基類的初始化在創(chuàng)建派生類對象時用指定參數(shù)調(diào)用基類的構(gòu)造函數(shù)來初始化派生類繼承基類的數(shù)據(jù)派生類構(gòu)造函數(shù)聲明為派生類構(gòu)造函數(shù)(變元表):基類(變元表),對象成員1(變元表)…對象成員n(變元表);構(gòu)造函數(shù)執(zhí)行順序:基類對象成員派生類八、虛函數(shù)與多態(tài)多態(tài)性(Polymorphism)是指一個名字,多種語義;或界面相同,多種實現(xiàn)。重載函數(shù)是多態(tài)性的一種簡單形式。虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體的聯(lián)系在運行時才進行,稱為動態(tài)聯(lián)編。(一)虛函數(shù)和動態(tài)聯(lián)編冠以關(guān)鍵字virtual的成員函數(shù)稱為虛函數(shù),實現(xiàn)運行時多態(tài)的關(guān)鍵首先是要說明虛函數(shù),另外,必須用,基類指針調(diào)用派生類的不同實現(xiàn)版本。例:classbase{public:virtualvoidvf1();virtualvoidvf2();virtualvoidvf3();voidf();};classderived:publicbase{public:voidvf1();//虛函數(shù)voi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論