C++繼承
與java類似,c++也是面向對象的語言,當然也就有繼承的概念。當創建一個類時,不需要重新編寫新的數據成員和成員函數,只需指定新建的類繼承了一個已有的類的成員即可。這個已有的類稱爲基類,新建的類稱爲派生類。例如,長方形是形狀。
語法格式
class 類名:訪問修飾符 基類
其中,訪問修飾符是 public、protected 或 private 其中的一個,如果未使用訪問修飾符,則默認爲 private。
假設有一個基類 Shape,Rectangle 是它的派生類:
#include <iostream>
using namespace std;
// 基類
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
// 派生類
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// 輸出對象的面積
cout << "Total area: " << Rect.getArea() << endl;
return 0;
}
訪問權限 public protected private
同一個類 yes yes yes
派生類 yes yes no
外部的類 yes no no
上面的yes表示能訪問到,no表示訪問不到。
繼承類型
當一個類派生自基類,該基類可以被繼承爲 public、protected 或 private 幾種類型。繼承類型是通過基類前面的訪問修飾符 來指定的。通常使用 public 繼承。當使用不同類型的繼承時,遵循以下幾個規則:
公有繼承(public):當一個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過調用基類的公有和保護成員來訪問。
保護繼承(protected): 當一個類派生自保護基類時,基類的公有和保護成員將成爲派生類的保護成員。
私有繼承(private):當一個類派生自私有基類時,基類的公有和保護成員將成爲派生類的私有成員。
多繼承
這個是c++和java在繼承方面最大的區別,我們知道java只支持單繼承。先說一下多繼承的語法格式:
class 類名:訪問修飾符1 基類1,訪問修飾符2 基類2, ......
下面用一個例子來說明一下,比如我們要做一個長方形的板子,所需費用和麪積是成正比的,如下:
#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 << "Total area: " << Rect.getArea() << endl;
// 輸出總花費
cout << "Total paint cost: $" << Rect.getCost(area) << endl;
return 0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:Total area: 35
Total paint cost: $2450