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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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") ;},面向對象的C++,C++為此而生,類,Good morning class.,類是C++的新特性,為適應面向對象的程序設計而提出;在C中,已經有了結構的概念;類與結構的最大不同之處在于——不僅可以包含成員變量(常量),還可以包含成員函數(shù)。當然,類還包括一些其他的特性:成員變量

3、、成員函數(shù)的訪問權限;構造函數(shù);析構函數(shù);拷貝構造函數(shù);隱式類型轉換;……,一個著名的類,,class person{private:string m_name;int m_age;string m_email;void update();public:person();~person();string get_namecard();};person wjj;,域運算符::,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.,每個類都

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

6、員變量被附加const屬性。這種聲明主要用于指明該函數(shù)不會更改成員變量的值。,構造函數(shù),constructor,沒有返回值類型,與類同名的函數(shù)被認為是構造函數(shù);它的作用就是——構造一個對象。如何構造?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){ … },構造函數(shù),It’s something not that new.,如果將某個構造函數(shù)聲明為private,則這個構造函數(shù)將無法使用。一般來說,這樣做的目的是阻止編譯器生成缺省的構造函數(shù)。只帶有一個參數(shù)的構造函數(shù)表明了一種可能的隱式類型轉換:string

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

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

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

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

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

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

14、person{…virtual string get_namecard();};WindyWinter->get_namecard();virtual string get_namecard() = 0;,多繼承,Well, one is just not enough.,一個類可以繼承于多個類,派生類獲得所有基類的成員。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段之下。友元是一個聲明。友元

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

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

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

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

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

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

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

評論

0/150

提交評論