freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

c程序設計精華-資料下載頁

2025-07-09 12:49本頁面
  

【正文】 nst Tamp。X):向it所指向量位置前插入n個值為X的對象。(1)pop_back(const Tamp。):刪除向量中最后一個對象。(2)erase(iterator it):刪除it所指向的容器對象。(3)clear():刪除向量中的所有對象,empty()返回true。 出圈游戲第八章 多態(tài)性和虛函數 多態(tài)性靜態(tài)聯(lián)編所支持的多態(tài)性稱為編譯時的多態(tài)性。當調用重載函數時,編譯器可以根據調用時使用的實參在編譯時就確定下來應調用哪個函數。動態(tài)聯(lián)編所支持的多態(tài)性稱為運行時的多態(tài)性,這由虛函數來支持。虛函數類似于重載函數,但與重載函數的實現策略不同,即對虛函數的調用使用動態(tài)聯(lián)編。 靜態(tài)聯(lián)編中的賦值兼容性及名字支配規(guī)律對象的內存地址空間中只包含數據成員,并不存儲有關成員函數的信息。這些成員函數的地址翻譯過程與其對象的內存地址無關。聲明的基類指針只能指向基類,派生類指針只能指向派生。它們的原始類型決定它們只能調用各種的同名函數area。 動態(tài)聯(lián)編的多態(tài)性當編譯系統(tǒng)編譯含有虛函數的類時,將為它建立一個虛函數表,表中的每一個元素都指向一個虛函數的地址。此外,編譯器也為類增加一個數據成員,這個數據成員是一個指向該虛函數表的指針,通常稱為vptr。虛函數的地址翻譯取決于對象的內存地址。編譯器為含有虛函數類的對象首先建立一個入口地址,這個地址用來存放指向虛函數表的指針vptr,然后按照類中虛函數的聲明次序,一一填入函數指針。當調用虛函數時,先通過vptr找到虛函數表,然后再找出虛函數的真正地址。派生類能繼承基類的虛函數表,而且只要是和基類同名(參數也相同)的成員函數,無論是否使用virtual聲明,它們都自動稱為虛函數。如果派生類沒有改寫繼承基類的虛函數,則函數指針調用基類的虛函數。如果派生類改寫了基類的虛函數,編譯器將重新為派生類的虛函數建立地址,函數指針會調用改寫過的虛函數。虛函數的調用規(guī)則是:根據當前對象,優(yōu)先調用對象本身的成員函數。這和名字支配規(guī)律類似,不過虛函數是動態(tài)聯(lián)編的,是在執(zhí)行期“間接”調用實際上欲聯(lián)編的函數。 虛函數一旦基類定義了虛函數,該基類的派生類中的同名函數也自動稱為虛函數。 虛函數的定義虛函數只能是類中的一個成員函數,但不能是靜態(tài)成員,關鍵字virtual用于類中該函數的聲明中。當在派生類中定義了一個同名的成員函數時,只要該成員函數的參數個數和相應類型以及它的返回類型與基類中同名的虛函數完全一樣,則無論是否為該成員使用virtual,它都將成為一個虛函數。 虛函數實現動態(tài)性的條件關鍵字virtual指示C++編譯器對調用虛函數進行動態(tài)聯(lián)編。這種多態(tài)性是程序運行到需要的語句處才動態(tài)確定的,所以稱為運行時的多態(tài)性。不過,使用虛函數并不一定產生多態(tài)性,也不一定使用動態(tài)聯(lián)編。例如,在調用中對虛函數使用成員名限定,可以強制C++對該函數的調用使用靜態(tài)聯(lián)編。產生運行時的多態(tài)性有如下3個前提:(1)類之間的繼承關系滿足賦值兼容性規(guī)則。(2)改寫了同名函數。(3)根據賦值兼容性規(guī)則使用指針(或引用)。由于動態(tài)聯(lián)編是在運行時進行的,相對于靜態(tài)聯(lián)編,它的運行效率比較低,但它可以使程序員對程序進行高度抽象,設計出可擴充性好的程序。 構造函數和析構函數調用虛函數在構造函數和析構函數中調用虛函數采用靜態(tài)聯(lián)編,即他們所調用的虛函數是自己的類或基類中定義的函數,但不是任何在派生類中重定義的虛函數。目前推薦的C++標準不支持虛構造函數。由于析構函數不允許有參數,因此一個類只能有一個虛析構函數。虛析構函數使用virtual說明。只要基類的析構函數被說明為虛函數,則派生類的析構函數,無論是否使用virtual進行說明,都自動地成為虛函數。delete運算符和析構函數一起工作(new和構造函數一起工作),當使用delete刪除一個對象時,delete隱含著對析構函數的一次調用,如果析構函數為虛函數,則這個調用采用動態(tài)聯(lián)編。一般來說,如果一個類中定義了虛函數,析構函數也應說明為虛函數,尤其是在析構函數要完成一些有意義的任務時,例如,釋放內存。如果基類的析構函數為虛函數,則在派生類為定義析構函數時,編譯器所生成的析構函數也為虛函數。 純虛函數與抽象類在許多情況下,不能再基類中為虛函數給出一個有意義的定義,這時可以將它說明為純虛函數,將其定義留給派生類去做。說明純虛函數的一般形式如下:class 類名{virtual 函數類型 函數名(參數列表)=0。}。一個類可以說明多個純虛函數,包含有純虛函數的類稱為抽象類。一個抽象類只能作為基類來派生新類,不能說明抽象類的對象。但可以說明指向抽象類對象的指針(或引用)。從一個抽象類派生的類必須提供純虛函數的實現代碼,或在該派生類中仍將它說明為純虛函數,否則編譯器將給出錯誤信息。這說明了純虛函數的派生類仍是抽象類。如果派生類給了某類所有純虛函數的實現,則該派生類不再是抽象類。如果通過同一個基類派生一系列的類,則將這些類總稱為類族。抽象類的這一特點保證了進度類族的每個類都具有(提供)純虛函數所要求的行為,進而保證了圍繞這個類族所建立起來的軟件能正常運行,避免了這個類族的用戶由于偶然失誤而影響系統(tǒng)正常運行。抽象類至少含有一個虛函數,而且至少有一個虛函數是純虛函數,以便將它與空的虛函數區(qū)分開來。下面是兩種不同的表示方法:virtual void area()=0。virtual void area(){}在成員函數內可以調用純虛函數。因為沒有為純虛函數定義代碼,所以在構造函數或虛構函數內調用一個純虛函數將導致程序運行錯誤。 多重繼承與虛函數 類成員函數的指針與多態(tài)性在派生類中,當一個指向基類成員函數的指針指向一個虛函數,并且通過指向對象的基類指針(或引用)訪問這個虛函數時,仍發(fā)生多態(tài)性。第9章 運算符重載及流類庫 運算符重載 重載對象的賦值運算符編譯器在默認情況下為每個類生成一個默認的賦值操作,用于同類的兩個對象之間相互賦值。默認的含義是逐個為成員賦值,即將一個對象的成員的值賦給另一個對象相應的成員,這種賦值方式對于有些類可能是不正確的。C++的關鍵字“operator”和運算符一起使用就表示一個運算符函數。例如“operator +”表示重載“+”運算符。 運算符重載的實質C++是由函數組成的,在C++內部,任何運算都是通過函數來實現的。因為任何運算都是通過函數來實現的,所以運算符重載其實就是函數重載,要重載某個運算符,只要重載相應的函數就可以了。與以往稍有不同的是,需要使用新的關鍵字“operator”,它和C++的一個運算符連用,構成一個運算符函數名,例如“operator+”.通過這種構成方法就可以像重載普通函數那樣重載運算符函數operator+()。由于C++已經為各種基本數據類型定義了該運算函數,所以只需要為自己定義的類型重載operator+()就可以了。一般地,為用戶定義的類型重載運算符都要求能夠訪問這個類型的私有成員,所以只有兩條路可走:要么將運算符重載為這個類型的成員函數,要么將運算符重載為這個類型的友元。C++的運算符大部分都可以重載,不能重載的只有. 、:: 、* 和 ?: 。前面三個是因為在C++中都有特定的含義,不準重載以避免不必要的麻煩;“?:”則是因為不值得重載。另外,“sizeof”和“”不是運算符,因而不能重載,而=、()、[ ] 、這4個運算符只能用類運算符來重載。 、和++運算符重載實例其實,插入符“”和提取符“”的重載也與其他運算符重載一樣,但操作符的左邊是流對象的別名而不是被操作的對象,運算符跟在流對象的后面,它們要直接訪問類的私有數據,而且流是標準類庫,用戶只能繼承不能修改,更不能是流庫的成員,所以它們必須作為類的友元重載。插入符函數的一般形式如下:ostream amp。operator(ostream amp。 output,類名 amp。對象名){return output。}output是類ostream對象的引用,它是cout的別名,即ostreamamp。output=cout。調用參數時,output引用cout(即cout的別名)。顯然,插入符函數的第2個參數使用引用方式比直接使用對象名的可讀性要好一些。提取符函數的一般形式如下:istram amp。operator(istream amp。 input,類名amp。對象名){return input。}input是類istream對象的引用。它是cin的別名,即istreamamp。input=cin。調用參數時,input引用cin(即cin的別名)。另外,提取符函數需要返回新的對象值,所以應該使用引用,即“類名amp。對象名”,不能使用“類名 對象名”。插入符函數不改變對象的值,所以兩種方法都可以。顯然,運算符“”重載函數有兩個參數,第1個是ostream類的一個引用,第2個是自定義類型的一個對象。這個重載方式是友元重載。這個函數的返回類型是一個ostream類型的引用,在函數中實際返回的是該函數的第一個參數,這樣做是為了使得“”能夠連續(xù)使用。有些C++編譯器不區(qū)分前綴或后綴運算符,這時只能通過對運算符函數進行重載來反映其為前綴或后綴運算符。注意不能自己定義新的運算符,只能是把C++原有的運算符用到自己設計的類上面去。同時,經過重載,運算符并不改變原有的優(yōu)先級,也不改變它所需的操作數目。當不涉及到定義的類對象時,它仍然執(zhí)行系統(tǒng)預定義的運算,只有用到自己定義的對象上,才執(zhí)行新定義的操作。應該根據需要進行運算符重載。不排除在某些特殊情況下會有一些特殊的需要,但大多數情況下不會將運算符“+”重載為兩個復數相減的運算(盡管有能力這么做)。一般總是要求運算符重載合乎習慣。 類運算符和友元運算符的區(qū)別如果運算符所需的操作數(尤其是第一個操作數)希望進行隱式類型轉換,則運算符應通過友元來重載。另一方面,如果一個運算符的操作需要修改類對象的狀態(tài),則應當使用類運算符,這樣更符合數據封裝的要求。但參數是引用還是對象,則要根據運算符在使用中可能出現的情況來決定。如果對象作為重載運算符函數的參數,則可以使用構造函數將常量轉換成該類型的對象。如果使用引用作為參數,因為這些常量不能作為對象名使用,所以編譯系統(tǒng)就要報錯。 下標運算符“[ ]”的重載運算符“[ ]”只能用類運算符來重載。 流類庫C++的流類庫由幾個進行I/O操作的基礎類和幾個支持特定種類的源和目標的I/O操作的類組成。 流類庫的基礎類在C++中,輸入輸出時同流來完成的。C++的輸出操作將一個對象的狀態(tài)轉換成一個字符序列,輸出到某個地方。輸入操作也是從某個地方接收到一個字符序列,然后將其轉換成一個對象的狀態(tài)所要求的格式。這看起來很像數據在流動,于是把接收輸出數據的地方叫做目標,把輸入數據來自的地方叫做源。而輸入和輸出操作可以看成字符序列在源、目標以及對象之間的流動。C++將與輸入和輸出有關的操作定義為一個類體系,放在一個系統(tǒng)庫里,以備用戶調用。這個執(zhí)行輸入和輸出操作的類體系就叫做流類,提供這個流類實現的系統(tǒng)庫就叫做流類庫。C++的流類庫由幾個進行I/O操作的基礎類和幾個支持特定種類源和目標的I/O操作類組成。在C++中,如果在多條繼承路徑上有一個匯合處,則稱這個匯合處的基類為公共基類(ios符合條件)。因為可以通過不同的訪問路徑訪問這個基類,從而使公共的基類會產生多個實例,這樣會引起二義性。如果想使這個公共的基類只產生一個實例,則可以將這個基類說明為虛基類。ios類就是isrream類和ostream類的虛基類,用來提供對流進行格式化I/O操作和錯誤處理的成員函數。用關鍵字virtual可將公共基類說明為虛基類,虛基類的定義很難處理,這就是為什么最初的C++語言沒有能支持多重繼承的原因。從ios類公有派生的istream和ostream兩個類分別提供對流進行提取操作和插入操作的成員函數,而iostream類通過組合istream類和ostream類來支持對一個流進行雙向(也就是輸入和輸出)操作,它并沒有提供新的成員函數。C++流類庫預定義了4個流,它們是cin、cout、cerr、clog。事實上,可以將cin視為類istream的一個對象,而將cout視為類ostream的對象。流是一個抽象概念,當實際進行I/O操作時,必須將流和一種具體的物理設備(比如鍵盤)聯(lián)接起來。C++的流類庫預定義的4個流所聯(lián)接起來的具體設備為:cin 與標準輸入設備相聯(lián)接cout 與標準輸出設備相聯(lián)接cerr 與標準錯誤輸出設備相聯(lián)接(非緩沖方式)clog 與標準錯誤輸出設備相聯(lián)接(緩沖方式) 默認輸入輸出的格式控制關于數值數據,默認方式能夠自動識別浮點數并用最短的格式輸出,還可以將定點數分成整數和小數部分。特別要注意字符的讀入規(guī)則。對單字符來講,它將舍去空格,直到讀到字符為止。對于單字符對象a,b和c,“cinabc;”能將連續(xù)的3個字符分別正確地賦給相應對象。對字符串來講,它從讀到第一個字符開始,到空格符結束。對于字符數組,使用數組名來整體讀入。但對于字符指針,盡管為它動態(tài)分配了地址,也只能采取逐個賦值的方法,它不僅不以空格結束,反而舍棄空格(讀到字符才計數)。因為字符串沒有結束位,所以將字符串作為整體輸出時,有效字符串后面將出現亂碼。不過,可以手工增加表示字符串的結束符“\0”來消除亂碼。當用鍵盤同時給一個單字符對象和一個字符串對象賦值時,不要先給字符串賦值。如果先給它賦值,應該強行使用結束符。Bool(布爾型),其他的值均識別為1。輸出時,只有0和1兩個值。如果默認輸入輸出格式不能滿足自己的要求,就必須重載它們。 使用ios_base類ios_base類派生ios類,ios類又是istream類和ostream類的虛基類。 常量名及含義常量名含義skipws跳過輸入中的空白left輸出數據按輸出域左邊對齊輸出right輸出數據按輸出域右邊對齊輸出intermal在指定任何引
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1