文档详情

C++面向对象程序设计课件1课件.ppt

发布:2024-09-02约2.02万字共88页下载文档
文本预览下载声明

10.3.2派生類3.私有繼承

當類的繼承方式為private時,基類的公有(public)成員和保護(protected)成員將成為派生類的私有成員,而基類的私有成員不能被派生類訪問。(看下圖:)返回本節目錄如10.1.1中實例2先定義了一個矩形類,然後又從矩形類中派生出正方形類,正方形是矩形的一個特例,矩形類實例化一個矩形對象時需要用到長和寬兩個參數,而正方形則只需要用到邊長一個參數,所以在派生過程中新增了成員函數InitSquare用來完成初始化工作。InitSquare函數實現過程中用到了基類的成員函數InitRect,因為InitRect函數為基類的公有成員,所以在派生類中可以被訪問。如果InitSquare函數的實現過程改為如下語句:

voidInitSquare(floatb)

{length=b;

width=b;}

該程式是不能被編譯通過的,因為派生類是不能訪問基類的私有成員的。另外,該程式使用的繼承方式為公有繼承,因此基類中的公有成員都被派生類吸收並成為公有成員。10.3.2派生類返回本節目錄10.3.3派生類的構造函數與析構函數返回本節目錄繼承的目的是為了發展,派生類繼承了基類的成員,實現了代碼重用,這只是一部分,而代碼的擴充才是最主要的,只有添加新的成員,加入新的功能,類的派生才有實際意義。我們知道,基類的構造函數和析構函數是不能被繼承的,因此如果要對新增成員進行初始化,就必須加入新的構造函數。同樣,對派生類對象的掃尾、清理工作也需要引入新的析構函數。1.派生類的構造函數如果基類的對象包含對成員的初始化,而在建立派生類對象時,由於基類的構造函數不能被繼承而無法執行,因此會使基類的成員未初始化,所以在設計派生類的構造函數10.3.3派生類的構造函數與析構函數返回本節目錄時,不僅要考慮派生類新增的數據成員的初始化,還應當考慮基類數據成員的初始化。

派生類構造函數的一般格式為:

派生類構造函數名(參數列表):基類構造函數名(參數列表)

{

派生類新增成員初始化語句;

}

將【例10.2】改為使用構造函數進行初始化:【例10.11】程式名為l10_11.cpp。

#includeiostream.h

classrectangle//定義矩形類(基類)

{public:

rectangle(floatlen,floatwid)//基類的構造函數 {length=len;

width=wid;

}floatGetArea();

floatGetPerimeter();

private://定義私有成員變數

floatlength;

floatwidth;

};

floatrectangle::GetArea()//基類成員函數實現

{returnlength*width;

}

floatrectangle::GetPerimeter()//基類成員函數實現

{return2*(length+width);

}

classrect:publicrectangle//從矩形類中派生新類(正方形類)

{public:

rect(floatb):rectangle(b,b)//派生類的構造函數

{}

};10.3.3派生類的構造函數與析構函數返回本節目錄10.3.3派生類的構造函數與析構函數返回本節目錄voidmain()

{rectx(8);//聲明正方形類對象

coutx.GetArea()endl;//調用從矩形類中繼承

//下來的成員函數(GetArea)

coutx.GetPerimeter()endl;//調用從矩形類中繼承下來

显示全部
相似文档