在本文中,您將學(xué)習(xí)在C ++中使用公共繼承,受保護繼承和私有繼承。您將通過示例學(xué)習(xí)在何處以及如何使用它。
您可以從具有不同訪問指定的基類聲明一個派生類,即公共繼承,受保護繼承或私有繼承。
#include <iostream>
using namespace std;
class base
{
.... ... ....
};
class derived : access_specifier base
{
.... ... ....
};注意:可以使用public,protected或private關(guān)鍵字代替上面代碼中使用的access_specifier(訪問說明符)術(shù)語。
派生類可以訪問基類中所有的非私有成員。因此基類成員如果不想被派生類的成員函數(shù)訪問,則應(yīng)在基類中聲明為 private。
我們可以根據(jù)訪問權(quán)限總結(jié)出不同的訪問類型,如下所示:
| 訪問 | public | protected | private |
|---|---|---|---|
| 同一個類 | yes | yes | yes |
| 派生類 | yes | yes | no |
| 外部的類 | yes | no | no |
一個派生類繼承了所有的基類方法,但下列情況除外:
基類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝構(gòu)造函數(shù)。
基類的重載運算符。
基類的友元函數(shù)。
當(dāng)一個類派生自基類,該基類可以被繼承為 public、protected 或 private 幾種類型。繼承類型是通過上面講解的訪問修飾符 access-specifier 來指定的。
我們幾乎不使用 protected 或 private 繼承,通常使用 public 繼承。當(dāng)使用不同類型的繼承時,遵循以下幾個規(guī)則:
公有繼承(public):當(dāng)一個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過調(diào)用基類的公有和保護成員來訪問。
保護繼承(protected): 當(dāng)一個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。
私有繼承(private):當(dāng)一個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。
多繼承即一個子類可以有多個父類,它繼承了多個父類的特性。
C++ 類可以從多個類繼承成員,語法如下:
class <派生類名>:<繼承方式1><基類名1>,<繼承方式2><基類名2>,…
{
<派生類類體>
};其中,訪問修飾符繼承方式是 public、protected 或 private 其中的一個,用來修飾每個基類,各個基類之間用逗號分隔,如上所示。現(xiàn)在讓我們一起看看下面的示例:
#include <iostream>
using namespace std;
// 基類 Shape
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
// 基類 PaintCost
class PaintCost
{
public:
int getCost(int area)
{
return area * 70;
}
};
// 派生類
class Rectangle: public Shape, public PaintCost
{
public:
int getArea()
{
return (width * height);
}
};
int main(void)
{
Rectangle Rect;
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();
// 輸出對象的面積
cout << "總面積: " << Rect.getArea() << endl;
// 輸出總花費
cout << "總花費: $" << Rect.getCost(area) << endl;
return 0;
}當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
總面積: 35 總花費: $2450