C++面向對象有三大特性:封裝, 繼承, 多態
上一篇文章我們主要講了C++面向對象的封裝特性, 瞭解了類和對象, 今天我們來講解繼承這個特性, 進一步瞭解類之間的關係
在現實生活中,兒子可以繼承父母的財產, 在編程世界裏, 有子類和父類, 子類可以繼承父類的特性, 這就是C++面向對象的特性之一繼承
父類和子類
父類, 也叫基類, 是被繼承的類
子類, 也叫派生類, 繼承父類的類
下面用簡單的圖形類代碼進行舉例:
父類圖形代碼如下:
// 父類:基礎圖形(Shape)- 封裝所有圖形的通用屬性和方法
class Shape {
public:
// 通用屬性:所有圖形都有的基準座標、顏色
int x; // 基準點x座標(圓心/左上角)
int y; // 基準點y座標
string color; // 圖形顏色
// 通用方法:顯示圖形基礎信息(子類直接繼承使用)
void showBaseInfo() {
cout << "圖形位置:(" << x << "," << y << "),顏色:" << color << endl;
}
// 通用方法框架:計算面積(子類可直接用,也可補充自身邏輯)
double calculateArea() {
cout << "基礎圖形無具體面積計算邏輯" << endl;
return 0.0;
}
// 通用方法框架:繪製圖形(子類可直接用,也可補充自身邏輯)
void draw() {
cout << "正在繪製基礎圖形" << endl;
}
};
子類圓形代碼如下
// 子類:圓形(Circle)- 繼承基礎圖形,添加特有屬性和方法
class Circle : public Shape {
public:
int radius; // 圓形特有屬性:半徑
// 子類重寫:計算圓形面積(覆蓋父類的通用方法)
double calculateArea() {
return 3.14 * radius * radius; // 圓形專屬面積公式
}
// 子類重寫:繪製圓形(覆蓋父類的通用方法)
void draw() {
cout << "正在繪製圓形:半徑" << radius << ",";
showBaseInfo(); // 調用父類繼承的方法
}
};
子類矩形代碼如下:
// 子類:矩形(Rectangle)- 繼承基礎圖形,添加特有屬性和方法
class Rectangle : public Shape {
public:
int width; // 矩形特有屬性:寬
int height; // 矩形特有屬性:高
// 子類重寫:計算矩形面積(覆蓋父類的通用方法)
double calculateArea() {
return width * height; // 矩形專屬面積公式
}
// 子類重寫:繪製矩形(覆蓋父類的通用方法)
void draw() {
cout << "正在繪製矩形:寬" << width << "×高" << height << ",";
showBaseInfo(); // 調用父類繼承的方法
}
};
測試代碼:
// 測試代碼
int main() {
// 測試圓形類
Circle circle;
circle.x = 100; // 繼承自Shape的屬性
circle.y = 200; // 繼承自Shape的屬性
circle.color = "紅色";// 繼承自Shape的屬性
circle.radius = 50; // 圓形特有屬性
circle.draw(); // 調用子類重寫的繪製方法
cout << "圓形面積:" << circle.calculateArea() << endl << endl;
// 測試矩形類
Rectangle rect;
rect.x = 300; // 繼承自Shape的屬性
rect.y = 150; // 繼承自Shape的屬性
rect.color = "藍色";// 繼承自Shape的屬性
rect.width = 80; // 矩形特有屬性
rect.height = 60; // 矩形特有屬性
rect.draw(); // 調用子類重寫的繪製方法
cout << "矩形面積:" << rect.calculateArea() << endl << endl;
// 測試父類本身(可選)
Shape baseShape;
baseShape.x = 50;
baseShape.y = 50;
baseShape.color = "黑色";
cout << "測試基礎圖形:";
baseShape.draw();
baseShape.calculateArea();
return 0;
}
運算結果如下:
根據上述的代碼得知,子類中的圓形類和矩形類繼承了父類圖形Shape中所有的 public 屬性和 public 方法,無需再重複定義即可直接使用
繼承的關鍵特性
子類能繼承父類的什麼?
✅ 公有成員(public):子類可直接訪問
✅ 保護成員(protected):子類內部可訪問,外部不可訪問
❌ 私有成員(private):子類無法直接訪問
❌ 構造函數 / 析構函數:不會被繼承,但子類構造時會先調用父類構造
總結
C++ 繼承的核心是代碼複用,用父類封裝通用屬性和方法, 子類專注於特有功能, 併為多態打下基礎,下一章我們就聊聊多態
如果這篇文章對你有用的話,歡迎點贊收藏哦~