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

正文內容

c中級培訓教材-在線瀏覽

2025-05-24 00:35本頁面
  

【正文】 (const char *psz) const。 { } CMyStringHandle::~ CMyStringHandle() { delete m_pThis。 } int CMyStringHandle::Index(const char *psz) { return m_pThisIndex(psz)。這行 class CMyString;是一個沒有完全指定的類型說明或類聲明(一個類的定義包含類的主體)。這對產生一個指向結構的指針來說已經足夠了。在這種技術里,包含具體實現的結構主體被隱藏在實現文件中。HandleBody模式如下:classHandlem_pThisclass圖1 HandleBody模式(句柄類做為接口)HandleBody的布局結構永遠不會隨著實現類數據成員的加入或者刪除或者修改而導致HandleBody的修改,即HandleBody協(xié)議不依賴于C++實現類的任何細節(jié)。然而HandleBody模式也有自己的弱點: 接口類必須把每一個方法調用顯示的傳遞給實現類,這在一個只有一個構造和一個析構的類來說顯然不構成負擔,但是如果一個龐大的類庫,它有上百上千個方法時候,光是編寫這些方法傳遞就有可能非常冗長,這也增加了出錯的可能性。接口和實現分離的HandleBody。 抽象接口的語言描述: class IMyString { virtual int Length() const = 0。 }; 抽象接口的內存結構: classvtprclass::m1class::m2圖2 抽象接口的內存布局 抽象接口的實現代碼: 接口: class IMyString { virtual int Length() const = 0。 }; 實現: class CMyString:public IMyString { private: const int m_cch。 public: CMyString(const char *psz)。 int Length() const。 } 從上面采用抽象接口的實例來看,抽象接口解決了HandleBody所遺留下來的全部缺陷。這是因為多重繼承致命的缺陷導致的: 菱形缺陷當繼承基類時,在派生類中就獲得了基類所有的數據成員副本。 考慮如果AA2都從某基類派生,該基類稱為Base,現在繼承關系如下:圖4 菱形繼承關系我們C++語言來描述這種繼承關系:class Base{… … };class A1 :public Base {… … };class A2 :public Base {… … };class B :public A1,public A2 {… … };那么AA2都具有Base的副本。這就是菱形缺陷,菱形缺陷時間是兩個缺陷: 子對象重疊 向上映射的二義性。 提出問題: 假設汽車最大速度的接口為ICar,潛艇最大速度的接口為 IBoat,有一個兩棲類的交通工具它可以奔跑在馬路上,也可以航行在大海中,那么它就同時擁有ICar、IBoat兩種交通工具的最大速度特性,我們定義它的接口為ICarBoat; class ICar { virtual int GetMaxSpeed()= 0; }; class IBoat { virtual int GetMaxSpeed()= 0; }; 我們先對ICarBoat的接口做一個嘗試: class CCarBoat { virtual int GetMaxSpeed();//既完成ICar的GetMaxSpeed()接口方法又 //完成IBoat的接口方法?顯然不能夠 }。 上面這一問題矛盾就在一一個方法,卻需要兩個答案。 class IXCar :public ICar { virtual int GetMaxSpeed() { GetCarMaxSpeed()。 }; class IXBoat:public IBoat { virtual int GetMaxSpeed() { GetBoatMaxSpeed()。 }; classCCarBoat: public IXCar , public IXBoat { virtual int GetCarMaxSpeed() { … … } virtual int GetBoatMaxSpeed() { … … } }。 在單一繼承的世界內,無論繼承關系怎么復雜,針對于同一對象,無論它的子類或者父類的this指針永遠相等。bObject ==(A*)amp。 但是在多繼承的世界內,上面的等式就不能恒成立,對象的同一性受到了挑戰(zhàn)。 (Base*)(A1*)amp。bObject 成立,當這種事情發(fā)生的時候我們就只能特殊處理了。 C++多態(tài)的兩種多態(tài)形式和區(qū)別 C++有兩種多態(tài)多態(tài)形式: 編譯時刻多態(tài),編譯時刻多態(tài)依靠函數重載或者模板實現 運行時刻多態(tài)。而運算符重載,使采用改寫或者說重新定義C++的內嵌運算符的方法。如果一個適合的函數被找到后,這個函數將會被調用,在這里“適合的”是指按下列順序匹配的符合下面條件的: 一個精確匹配的函數被找到 一個參數只有細微的差別,幾乎可以忽略不計的 。 通過用戶自定義的轉化函數(如轉化運算符或者構造函數)達到參數匹配的 參數是采用省略符號 函數重載的方法基本上有: 根據函數參數數據類型的不同進行的重載; 根據參數個數的不同進行的重載; 缺省參數上的重載 我們在這里把缺省參數也稱為一種函數重載,實際上它并不是嚴格意義上的重載。第一,只有參數列表的后部參數才可是缺省的,也就是說,我們不可以在一個缺省參數后面又跟一個非缺省的參數。第三,缺省參數只能放在函數聲明中。 返回值重載 特別注意,在C++中并沒有根據返回返回值的不同進行重載的,即我們不能定義這樣的函數: void f()。 在C++中這樣的函數聲明方法是被禁止的,但是我們有時間可能又需要這樣的重載方法,我們又怎么實現呢,其實很簡單,jiang函數的參數進行擴展,將這個函數返回值的數據類型,做為擴展參數的數據類型來。 運算符重載 你可以重新定義C++絕大多數內嵌運算符的實現方法和功能,這些重定義的或者說重載的運算符,有可能全局作用的,也有可能作用在類基礎之上的,運算符重載的實現可能以類的成員函數的形式出現,也有可能以全局性的函數的身份出現。 public: plex(doubler,doublei):re(r),im(i){}。 plex operator*(plex)。 定義了plex 這個復數的一個簡單的實現概念模型。 plex b = plex( , 2)。 a = b + c。 c= a * b + plex(1 , 2)。Bitwise ANDBinary=Left shift/assignmentBinaryamp。amp。=Bitwise AND/assignBinary==EqualityBinary( )Function call—Greater thanBinary*MultiplicationBinary=Greater than or equal toBinary*Pointer dereferenceUnaryRight shiftBinary*=Multiplication/assignBinary=Right shift/assignmentBinary+AdditionBinary[ ]Array subscript—+Unary PlusUnary^Exclusive ORBinary++Increment1Unary^=Exclusive OR/assignmentBinary+=Addition/assignmentBinary|Bitwise inclusive ORBinary–SubtractionBinary|=Bitwise inclusive OR/assignmentBinary–Unary negationUnary||Logical ORBinary––Decrement1Unary~One’s plementUnary–=Subtraction/assignBinarydeletedelete—–Member selectionBinarynew不可重載運算符表:OperatorName.Member selection.*Pointertomember selection::Scope resolution? :ConditionalPreprocessor symbolPreprocessor symbol 在上面可重載的運算符可以看出運算符重載共分為兩類:一元運算符重載和二元運算符重載 一元運算符重載: 在聲明一個類的非靜態(tài)的一元運算符重載函數時,你必須聲明的形式如 下: rettype operatorop() (1) 在這里rettype 是指返回數據類型 op 是指一元運算符 在聲明一個全局的一元運算符重載函數時,你必須聲明的形式日下: rettype operatorop( arg ) (2) 在這里 rettype 與 op 和上面的意思一樣,arg 是指這個運算符所作用 的數據類型 二元運算符重載: 在聲明一個類
點擊復制文檔內容
規(guī)章制度相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1