版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、l C+提供特殊的操作符new delete能方便的使用空閑存儲空間。l 這些特殊的操作符使用了較底層的例程例如 malloc和free或其它操作系統(tǒng)提供的過程來管理空閑內(nèi)存。l 然而,內(nèi)置操作對某個應用程序來說可能是不適當?shù)幕虻仔实?。l譬如:有時希望使用某種特殊的動態(tài)內(nèi)存分配方法。(對一些分配子程序,它們能在堆耗盡時,自動開始把一個磁盤文件當作虛存使用,或用戶希望控制某一片存儲空間等)l 這時,需要對new和delete進行重載。l 重載函數(shù)new和delete的框架如下:l void * operator new(size_t size)l /進行分配 l return 被分配內(nèi)存空間的
2、地址 ll void operator delete(void *p)l ./釋放由p指向的存儲空間ll說明:類型size_t是一個包含在stddef.h中的typedef,它是由C+定義為能容納可分配的單一的存儲塊的最大值。它往往是個整型類型。l一 局部重載new和delete l 要重載一個與類相關的new和delete函數(shù),只需要使重載運算符函數(shù)成為該類的成員函數(shù)。l 例:class vector2Dl int x,y; l public:l vector2D(int a,int b);l vector2D( );l void *operator new(size_t size);l v
3、oid operator delete(void *p);l ;l vector2D:vector2D(int a,int b)l x=a;y=b;l cout“constructing”endl; l l vector2D:vector2D( )l cout“destructing”endl;l void * vector2D:operator new(size_t size)l cout“new vector2D”endl;l return malloc(size);l l void vector2D:operator delete(void *p)l cout“vector2D dele
4、te”endl;l free(p);l l main( )l vector2D *p;l p=new vector2D(1,2);l int *q;l q=new int;l delete p;l delete q;ll問題1. 構造函數(shù),析構函數(shù),重載new以 l 及delete的執(zhí)行順序l 2.重載new以及delete是靜態(tài)函數(shù)還是依附于l 它的宿主對象的普通成員函數(shù)。l注意:new int 和delete q使用的是全局版本。 new vector2Dconstructing destructing vector2D deletel 二 全局重載new和deletel 可以在任何類說明
5、之外重載new和delete,使它們成為全局的。當new和delete被全局重載時,C+原來的new和delete被忽略,并且重載運算符用于所有的分配要求。l例:void *operator new(size_t size)l cout“constructing”endl;l malloc(size);.l void operator delete(void *p)l cout“destructing”endl;l free(p); l main( )l vector2D *p;l p=new vector2D(1,2);l delete p;l int *q;l q=new int;l de
6、lete q;ll考慮輸出? constructing constructing destructing destructing constructing destructingl 重載new和delete的功能為用戶提供了使用存儲區(qū)的靈活性。l 注意:重載全局的new和delete是一個危險的措施。在應用程序中,一般采用控制某些對象動態(tài)的分配方法即局部重載。l 類型轉換就是將一種類型的值轉換為另一種類型的值。C+語言允許的類型轉換有4種:l 標準類型標準類型l 標準類型類類型l 類類型標準類型l 類類型類類型l 類被視為用戶定義的類型,可以象系統(tǒng)預定義類型一樣進行類型轉換。l 對于標準類型,
7、C+提供了兩種類型轉換:l 1 隱式類型轉換l 2 顯式類型轉換l隱式類型轉換發(fā)生在下述情況:l 混合運算:級別低的向級別高的轉換;l 將表達式的值賦給變量:表達式的值向變 l 量類型的值轉換。l 實參向形參傳值:實參的值向形參的值轉換。l 函數(shù)返回結果:返回的值向函數(shù)返回類型的l 值進行轉換。l 2 顯式類型轉換l (類型名)表達式l 或 (類型名)(表達式)l 或函數(shù)法 : 類型名(表達式)l 例如: int i=int(1.3); l float f=1.2;l int k=int(f);l int a=1;l int *p=&a;l char *q;l q=(char *)p;
8、l char short int long float double 低 高 l 標準類型轉換為類類型l 可以通過自定義的重載賦值號“=”的函數(shù)和構造函數(shù)實現(xiàn)標準類型類類型;它們都需要有標準類型的參數(shù)。l class Xl public:l X(int );l X(const char*,int=0);l l void f(X arg)l l X b=“abcdef”;l X a=3;l l 其中 構造函數(shù)X(int)將整數(shù)類型轉換為類類型X;構造函數(shù)X(const char *,int=0)將字符串轉換為類類型Xl 注意:當X的構造函數(shù)不進行這個轉換時,該轉換失敗。l 例如:class X
9、class Yl public: public:l X(int); Y(X);l ; ;l void f( )l X objX=1; / intXl Y objY=objX; / XYl Y obj=1; /?l l 類Y沒有構造函數(shù)Y(int),因此不進行轉換 l 考慮: 如何保證不發(fā)生并不期望的隱式轉換?l class vector vector(int k); public: static vector make(int s) vector v=s; return v; friend vector fmake(int s) vector v=s; return v; l void f(
10、)l vector v1=vector:make(1);l vector v2=fmake(2);l v1=5; /?l v1=vector:make(10);l 構造函數(shù)vector(int )屬于私有段,在公有段設置一個statice函數(shù)或設置一個友元函數(shù)來調用這個構造函數(shù)。這樣,構造函數(shù)是私有的,避免了不期望的隱式轉換。l 類類型轉換函數(shù)類類型轉換函數(shù)l 帶一個參數(shù)的構造函數(shù)可以進行類型轉換,但是轉換功能很受限制。若我們要把一個類轉換為基本類型,采用這種方式就辦不到。因此,需要引入一種特殊的成員函數(shù):類型轉換函數(shù),它在類對象之間提供一種類似顯示類型轉換的機制。l X:operator t
11、ype( )l .l return type 類型的實例;l l 這個函數(shù)沒有參數(shù),沒有返回類型,但這個函數(shù)體內(nèi)必須有一條返回語句,返回一個type類型的實例。類型轉換函數(shù)的功能是將類型為X的對象轉換為type的實例。l例如:class Xl int x;l public:l operator int( )l return x;l ;l void f(X a)l int i=int(a);l i=(int)a;l i=a;l 三種情況,所賦的值都是由X:operator int( )來進行轉換。均是執(zhí)行a.operator int( );l 至此,我們知道l 類類型標準類型 使用類型轉換函數(shù)l 標準類型類類型 使用構造函數(shù)l 我們考慮,若一個類既有用于轉換的構造函數(shù),又有類型轉換函數(shù):l X(int);l operator int( );l 語句 a=a+i是否合法?如何解釋?l l 我們可以將a+i這樣解釋嗎?l a.operator int( )+il 將a轉換得到一個整數(shù)與i相加后得到一個整型結果,再用X(int)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商企業(yè)運營專員聘用合同樣本
- 住宅區(qū)雞舍建設合同
- 建筑工程拆遷施工合同范本
- 水上運輸水車租賃合同
- 箱包加工合同書
- 全面質量管理質量管理辦法
- 智能交通系統(tǒng)招投標申請表
- 租賃設備合同修改
- 保健用品行業(yè)售后服務管理規(guī)范
- 商業(yè)建筑電氣安裝合同
- 6.2反比例函數(shù)的圖象與性質(第一課時)教學設計2024-2025學年北師大版數(shù)學九年級上冊
- 藥品批發(fā)企業(yè)承運商審計報告
- 2024年農(nóng)業(yè)農(nóng)村部大數(shù)據(jù)發(fā)展中心第三批面向社會公開招聘7人(高頻重點復習提升訓練)共500題附帶答案詳解
- 了解紅旗渠學習紅旗渠精神
- 城市梁橋拆除工程安全技術規(guī)范
- 《食品添加劑應用技術》第二版 課件 任務1.2 食品添加劑使用標準檢索-1標準解讀
- 2024年二級建造師繼續(xù)教育題庫及答案(500題)
- 河北省保定市勞動合同范本
- 脫硫計算公式
- 我的家鄉(xiāng)吉林課件
- 中國兒童有聲讀物行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2029版
評論
0/150
提交評論