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

正文內(nèi)容

c中級培訓(xùn)教材(編輯修改稿)

2025-05-03 00:35 本頁面
 

【文章內(nèi)容簡介】 又跟一個非缺省的參數(shù)。第二,一旦我們開始使用缺省參數(shù),那么這個參數(shù)后面的所有參數(shù)都必須是缺省的。第三,缺省參數(shù)只能放在函數(shù)聲明中。第四,缺省參數(shù)可以讓聲明的參數(shù)沒有標(biāo)識符。 返回值重載 特別注意,在C++中并沒有根據(jù)返回返回值的不同進行重載的,即我們不能定義這樣的函數(shù): void f()。 int f()。 在C++中這樣的函數(shù)聲明方法是被禁止的,但是我們有時間可能又需要這樣的重載方法,我們又怎么實現(xiàn)呢,其實很簡單,jiang函數(shù)的參數(shù)進行擴展,將這個函數(shù)返回值的數(shù)據(jù)類型,做為擴展參數(shù)的數(shù)據(jù)類型來。如下: void f(void); void f(int); 此時這個例子中的參數(shù)列表的數(shù)據(jù),只在編譯時刻起到分練函數(shù)的作用,在運行時刻并不起到傳值作用,模板中經(jīng)常都應(yīng)用到了這種方法。 運算符重載 你可以重新定義C++絕大多數(shù)內(nèi)嵌運算符的實現(xiàn)方法和功能,這些重定義的或者說重載的運算符,有可能全局作用的,也有可能作用在類基礎(chǔ)之上的,運算符重載的實現(xiàn)可能以類的成員函數(shù)的形式出現(xiàn),也有可能以全局性的函數(shù)的身份出現(xiàn)。 在C++中重載運算符的名字為operatorx, 在這里 x 是一個可重載的運算符,如:重載 加法運算符,你需要定義一個名為 operator+ 的函數(shù),然后實現(xiàn)他,其它的類似定義就可以了,例如: Class plex //very simplified plex { doublere,im。 public: plex(doubler,doublei):re(r),im(i){}。 plex operator+(plex)。 plex operator*(plex)。 }。 定義了plex 這個復(fù)數(shù)的一個簡單的實現(xiàn)概念模型。一個復(fù)數(shù)是由一對double類型的數(shù)據(jù)組成,并定義了這個復(fù)數(shù)的兩個方法,加法運算 plex::operartor+()和乘法運算 plex::operator*().現(xiàn)在我們就能夠?qū)崿F(xiàn)下面的復(fù)數(shù)表達式了: void f() { plex a = plex(1 , )。 plex b = plex( , 2)。 plex c = b。 a = b + c。 b = b + c * a。 c= a * b + plex(1 , 2)。 } C++可重載的和C++不可重載的運算符可重載運算符表:OperatorNameTypeOperatorNameType,CommaBinary–*Pointertomember selectionBinary!Logical NOTUnary/DivisionBinary!=InequalityBinary/=Division/assignmentBinary%ModulusBinaryLess thanBinary%=Modulus/assignmentBinaryLeft shiftBinaryamp。Bitwise ANDBinary=Left shift/assignmentBinaryamp。AddressofUnary=Less than or equal toBinaryamp。amp。Logical ANDBinary=AssignmentBinaryamp。=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)的一元運算符重載函數(shù)時,你必須聲明的形式如 下: rettype operatorop() (1) 在這里rettype 是指返回數(shù)據(jù)類型 op 是指一元運算符 在聲明一個全局的一元運算符重載函數(shù)時,你必須聲明的形式日下: rettype operatorop( arg ) (2) 在這里 rettype 與 op 和上面的意思一樣,arg 是指這個運算符所作用 的數(shù)據(jù)類型 二元運算符重載: 在聲明一個類的非靜態(tài)的二元運算符重載函數(shù)時,你必須聲明的形式如 下: rettype operatorop(arg) (3) (3)式和二式基本相同 arg 可以是任何一個 在聲明一個全局的二元運算符重載函數(shù)時,你必須聲明的形式日下: rettype operatorop(arg1, arg2) (4) 在這里 rettype 與 op 和上面的意思一樣,arg1,arg2, 是指這個運算 符所作用兩個數(shù)據(jù)類型 幾類特殊的運算符重載 類型轉(zhuǎn)換運算符 所有的數(shù)據(jù)類型均可以定義構(gòu)造函數(shù),包括系統(tǒng)定義的數(shù)據(jù)類型和用戶自定義的數(shù)據(jù)類型,如: class CString { … … operator LPCSTR() const。 … … }; 應(yīng)用: CString str = “12345”。 LPCSTR lpsz = str。//此處會進行LPCSTR運算 這只是一個簡單的應(yīng)用的示例,其實有時間類型轉(zhuǎn)換具有無比強大的功能。我曾經(jīng)就是用類型裝換運算符重載解決一個跨平臺通信的問題。 bool運算符重載 int、float、bool等運算符也是可以重載的,例如重載bool運算符,但是重載運算符bool 時候,需要注意有很多麻煩和臆想不到的東西templateclass Tclass testbool{ … … operator bool() const throw() { return m_ pT != 0。 }private: T *m_pT。}下面結(jié)果均通過編譯testboolint sp1。testboolstd::string sp2。if(sp1 == sp2)if (sp1 != sp2) bool b = sp1 int I = sp1 * 10。 從上面可以看得出 bool 的表現(xiàn)已經(jīng)遠遠超過 bool 本身了,所以建議大家不要輕易對 bool 進行重載操作。 地址運算符重載 在DCOM應(yīng)用中,我們有一個重載運算符的例子: STDAPI CoCreateInstance( REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv)。 我們看最后一個參數(shù) LPVOID 指針的指針,這里是一個輸出參數(shù),返回 一個接口的指針。 一般情況下我們應(yīng)用如下 IUnknown *pUn。 CoCreateInstance(…,…,…,…,(void **)amp。 pUn)。 (5) 然而我們也可以這樣寫: IUnknown *pUn。 CComPtr Ptr(pUn)。 CoCreateInstance(…,…,…,…,(void **)amp。 Ptr)。 (6) 之所以能夠這么寫這是因為CComPtr 重載了 “amp。” 運算符,如下: template class T class CComPtr { public: … CComPtr(T* lp) { if ((p = lp) != NULL) pAddRef()。 } … T** operatoramp。() { ATLASSERT(p==NULL)。 return amp。p。 } private: T* p。 }。 amp。Ptr 實際上是得到了一般的情況下,我們并不能對pUn的地址,所以 (5) 式和 (6)式其實傳入的
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1