走向c++之路(二)_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、走向C++之路,WindyWinterwindy@briefdream.com,#include main(t ,_,a) char*a;{return ti^+?,()[?qzyrjuvcdefg\h,!kbpolwxs'.t main(")&&a[-t]&&main(t-1,_,a):t/2?_==*a?putchar(32[a]) :_%115u:!

2、zym^t|x|\ |xtutu!uz\ |#}t") ;},面向?qū)ο蟮腃++,C++為此而生,類,Good morning class.,類是C++的新特性,為適應(yīng)面向?qū)ο蟮某绦蛟O(shè)計(jì)而提出;在C中,已經(jīng)有了結(jié)構(gòu)的概念;類與結(jié)構(gòu)的最大不同之處在于——不僅可以包含成員變量(常量),還可以包含成員函數(shù)。當(dāng)然,類還包括一些其他的特性:成員變量

3、、成員函數(shù)的訪問(wèn)權(quán)限;構(gòu)造函數(shù);析構(gòu)函數(shù);拷貝構(gòu)造函數(shù);隱式類型轉(zhuǎn)換;……,一個(gè)著名的類,,class person{private:string m_name;int m_age;string m_email;void update();public:person();~person();string get_namecard();};person wjj;,域運(yùn)算符::,Well, o

4、ne is just not enough.,string person::get_namecard(){return m_name+m_email;}#include int main(){std::cout<<“wjj is a smart girl.”<<std::endl;return 0;},this指針和成員函數(shù)的const屬性,This is my … self.,每個(gè)類都

5、有一個(gè)特殊的“成員”——this,表示對(duì)象自身;this只能在該類的內(nèi)部使用,與不指明this沒(méi)有區(qū)別:this->m_name ? m_name;this->update() ? update();如果修改get_namecard()的聲明為:string get_namecard() const ;get_namecard()將不能更改任何成員變量的值,在函數(shù)內(nèi)部:this指針變成指向常量的指針;任何成

6、員變量被附加const屬性。這種聲明主要用于指明該函數(shù)不會(huì)更改成員變量的值。,構(gòu)造函數(shù),constructor,沒(méi)有返回值類型,與類同名的函數(shù)被認(rèn)為是構(gòu)造函數(shù);它的作用就是——構(gòu)造一個(gè)對(duì)象。如何構(gòu)造?person(): m_name(“Wang Jingjing”), m_age(0){ … }person(const person & t): m_name(t.m_name), m_age(t.m_age

7、), m_email(t.m_email){ … }person(string name, int age): m_name(name), m_age(age){ … },構(gòu)造函數(shù),It’s something not that new.,如果將某個(gè)構(gòu)造函數(shù)聲明為private,則這個(gè)構(gòu)造函數(shù)將無(wú)法使用。一般來(lái)說(shuō),這樣做的目的是阻止編譯器生成缺省的構(gòu)造函數(shù)。只帶有一個(gè)參數(shù)的構(gòu)造函數(shù)表明了一種可能的隱式類型轉(zhuǎn)換:string

8、(const char * s);new與malloc的區(qū)別在于:前者創(chuàng)建對(duì)象,后者分配空間。,析構(gòu)函數(shù),destructor,沒(méi)有返回值,名字是~,沒(méi)有參數(shù)的函數(shù)是析構(gòu)函數(shù)。構(gòu)造函數(shù)可以有多個(gè),析構(gòu)函數(shù)只能有一個(gè)。它的作用是銷毀一個(gè)對(duì)象。如果沒(méi)有聲明析構(gòu)函數(shù),編譯器將合成默認(rèn)析構(gòu)函數(shù):對(duì)于內(nèi)置類型,釋放其空間;對(duì)于類類型,調(diào)用其析構(gòu)函數(shù)。實(shí)際上,上面兩步是編譯器附加在任何析構(gòu)函數(shù)最后的兩步。因?yàn)闆](méi)有辦法顯式“釋放空間”和

9、調(diào)用析構(gòu)函數(shù)。析構(gòu)函數(shù)只能在delete時(shí)和離開(kāi)該對(duì)象的生存域時(shí)被自動(dòng)調(diào)用。也存在將析構(gòu)函數(shù)聲明為private的情況。,靜態(tài)成員,Steady, steady…,static關(guān)鍵字也可以修飾類的成員:class person{…static int population;static int get_population();};被修飾的成員叫做類的靜態(tài)成員,是這個(gè)類的屬性,不是某個(gè)對(duì)象的屬性。訪問(wèn)用::i

10、nt person::population = 0;person::get_population();,運(yùn)算符重載,It’s fully operational.,C++不僅提供了對(duì)函數(shù)的重載,也提供了對(duì)運(yùn)算符的重載。運(yùn)算符可以視為特殊的函數(shù)。一個(gè)簡(jiǎn)單的運(yùn)算符重載如下:?jiǎn)文窟\(yùn)算符: operator [] ( a);int & operator [] (int i);雙目運(yùn)算符: operator a, b);

11、bool operator < (person & a, person & b);特別的運(yùn)算符重載:++、--。,運(yùn)算符重載,,還有一類特殊的運(yùn)算符也可以被重載:opetator ()operator int();operator xxx();這樣的運(yùn)算符必須是某個(gè)類的成員函數(shù),它為這個(gè)類提供向特定類型的隱式類型轉(zhuǎn)換。比如:class person{…string operator strin

12、g();}更多的很多情況下,運(yùn)算符重載是一個(gè)復(fù)雜的工程。在你真正掌握重載之前,請(qǐng)慎用。,繼承與派生,Kim Jong-il chooses third son as his successor.,class tallent : public person{…int IQ;};上面定義了person類的一個(gè)派生類tallent類,它將獲得person類的一切成員,還另外附加了一個(gè)IQ成員。上面的“一切成員”,不包括基類

13、的構(gòu)造函數(shù)、析構(gòu)函數(shù)、new運(yùn)算符和=運(yùn)算符。但派生類中可以訪問(wèn)他們。派生類對(duì)象可以隱式轉(zhuǎn)換為基類類型;派生類類型的指針可以隱式轉(zhuǎn)換為基類類型的指針;person * WindyWinter = new tallent;,虛函數(shù)與多態(tài),I’m seeking VPS co-tenants.,在聲明某個(gè)成員函數(shù)時(shí)加上virtual修飾符,表示允許派生類重載該函數(shù);在聲明析構(gòu)函數(shù)時(shí)加上virtual修飾符,產(chǎn)生特殊效果。class

14、person{…virtual string get_namecard();};WindyWinter->get_namecard();virtual string get_namecard() = 0;,多繼承,Well, one is just not enough.,一個(gè)類可以繼承于多個(gè)類,派生類獲得所有基類的成員。class tallent : public person, public another_

15、person{…int IQ;};,友元,A friend in need is a friend indeed.,class tallent{…friend smart_girl;friend bool pay();friend bool dreamland::login();friend tallent operator +(…);};友元需要聲明在類的public段之下。友元是一個(gè)聲明。友元

16、不是類的成員。,Tags Cloud,Keywords,類 域運(yùn)算符構(gòu)造函數(shù) 析構(gòu)函數(shù)this指針 靜態(tài)成員 靜態(tài)成員函數(shù)友元繼承 派生 多繼承 虛函數(shù) 純虛函數(shù) 多態(tài)運(yùn)算符重載 類型轉(zhuǎn)換OOP虛繼承,標(biāo)準(zhǔn)模板庫(kù)與泛型編程,Hallowed are the C++,標(biāo)準(zhǔn)模板庫(kù),STL,C語(yǔ)言有一個(gè)小巧精干的標(biāo)準(zhǔn)庫(kù);C++在引入泛型編程的思想后,標(biāo)準(zhǔn)庫(kù)得到了廣泛的、革命性的變革——標(biāo)準(zhǔn)模板庫(kù)。string獲得大量類的特

17、性;vector、list、deque、queue、stack、priority_queue、set/map紛紛進(jìn)入STL;STL中的函數(shù)不再限定參數(shù)的類型,而只做出基本要求:min、max、sort要求此種類型定義過(guò)”<“;binary_search要求傳遞進(jìn)來(lái)的序列可以隨機(jī)訪問(wèn);……,string,#include成員函數(shù):[]:返回指定位置的字符;size()、length():返回長(zhǎng)度,O(1)時(shí)間;cl

18、ear():清空;+=、insert():插入;erase():刪除;find():查找;substr():取子串。它們的詳細(xì)用法、函數(shù)原型,以及更多的成員函數(shù)和用法,請(qǐng)去http://www.cplusplus.com/reference/string/string 查找。,,string,、=、==、!=getline(cin, str):從標(biāo)準(zhǔn)輸入流cin讀取一行,放入str。cout>str:從標(biāo)準(zhǔn)輸入流讀取

19、一個(gè)字符串(以非空白字符開(kāi)頭、空白字符結(jié)尾),放入str。,,vector,#includevector a;[]:取指定位置的元素,[0]是第一個(gè)元素;size():vector的長(zhǎng)度;push_back():將一個(gè)元素插入到vector的最后面;insert()、clear()、erase()http://www.cplusplus.com/reference/stl/vector/,,迭代器,最簡(jiǎn)單的迭代器相當(dāng)于指向

20、容器中元素的指針;vector::iterator i;i=a.begin(); *i 取得一個(gè)元素的引用;i->push_back()。a.end() 表示“超出末端的位置”:for (i=a.begin(); i<a.end(); ++i)vector的迭代器可以隨機(jī)訪問(wèn):--i;i += 2;i -= 6;與iterator相仿的是reverse_iterator,對(duì)應(yīng)有rbegin()、rend()

21、。其他類型的迭代器比較復(fù)雜。http://www.cplusplus.com/reference/std/iterator/,iterators,list,#includelist b;size():list的長(zhǎng)度,O(1)時(shí)間;push_back()/push_front():將一個(gè)元素插入到list的最后面/最前面;insert()、clear()、erase()splice()、merge()list::ite

22、rator 只能++/--,不能隨機(jī)訪問(wèn)。http://www.cplusplus.com/reference/stl/list/,,sort,#includevector a;sort(a.begin(), a.end());vector c;sort(c.rbegin(), c.rend());int b[100];sort(b, b+100);list d;sort(d.begin(), d.end());

23、 Xd.sort() Ohttp://www.cplusplus.com/reference/algorithm/sort/,,其他的小工具,#includemin(a, b)max(a, b)swap(a, b)http://www.cplusplus.com/reference/algorithm/,,流輸入輸出,嚴(yán)格來(lái)說(shuō),這不是STL的一部分。iostre

24、am——scanf/pringffstream——fscanf/fprintfstringstream——sscanf/sprintfcin>>XXX; cout>XXX; fout>XXX;http://www.cplusplus.com/reference/iostream/,,Tags Cloud,Keywords,string vector list迭代器sortiostream fst

溫馨提示

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

評(píng)論

0/150

提交評(píng)論