今天我們來學習c++中的繼承的概念和意義。
問題:類之間是否存在直接的關聯關係?
回答:類之間存在組合的關係,整體與部分的關係。
可以看一下生活中的例子:
下面我們以乙個簡單的程式來看一下類組合的關係:
#include
#include
using
namespace
std;
class memory
~memory()
};class disk
~disk()
};class cpu
~cpu()
};class mainboard
~mainboard()
};class computer
void power()
void reset()
~computer()
};int main()
執行結果為:
memory()
disk()
cpu()
mainboard()
computer()
~computer()
~mainboard()
~cpu()
~disk()
~memory()
從上面程式我們可以看出組合關係的特點是:
還是先看乙個生活中的例項:
那麼繼承關係有什麼樣的性質呢?
物件導向的繼承就是指類之間的父子關係
c++中通過下面的方式描述繼承的關係
下面還是來用乙個例子程式來分析繼承的關係吧:
#include
#include
using
namespace
std;
class parent
void method()
};class child : public parent
};int main()
執行結果為:
parent()
i』m child calss!
mv = 100
由執行結果可以看出,當執行child c建立類c時,就直接呼叫了父類的建構函式進行列印語句。然後執行 c.hello();c.method();這兩個語句時,分別呼叫孩子類的成員函式與父親類的成員函式,這說明孩子物件可以直接呼叫父親的成員函式和本身自己的成員函式。
繼承的重要規則:
繼承的意義:
繼承是c++中**復用的重要手段。通過繼承,可以獲得父類的所有功能,並且可以在子類中重寫已有功能,或者新增新功能。
下面再來乙個例子看看繼承的規則與意義:
#include
#include
using
namespace
std;
class memory
~memory()
};class disk
~disk()
};class cpu
~cpu()
};class mainboard
~mainboard()
};class computer
void power()
void reset()
~computer()
};class hpbook : public computer
void install(string os)
void os()
};class macbook : public computer
};int main()
執行結果為:
memory()
disk()
cpu()
mainboard()
computer()
power()
ubuntu 16.04 lts
memory()
disk()
cpu()
mainboard()
computer()
mac os
~computer()
~mainboard()
~cpu()
~disk()
~memory()
~computer()
~mainboard()
~cpu()
~disk()
~memory()
我們可以看出,程式的前幾個類是組合關係,後面的兩個類hpbook與macbook類與computer類是繼承的關係。其中hpbook與macbook類繼承了computer類的所有行為。
由以上幾個程式的分析可以得出以下幾條總結:
繼承是物件導向中類之間的一種關係
子類擁有父類所有的屬性和行為
子類物件可以當做父類的物件使用
子類中可以新增父類中所沒有的方法和屬性
繼承是物件導向中**復用的重要手段
C 深度剖析教程23 繼承中的訪問級別
本c 課程學習記錄,完全 於狄泰軟體學院的相關課程,想一起學習的加我q1126137994或者q群199546072 給你推薦更多相關課程。今天學習c 中繼承的訪問級別。首先我們思考乙個問題,子類是否可以直接訪問父類的私有成員?我們可以看看下圖的思考過程 可以看出,兩者互相矛盾,那麼實際上是什麼樣呢...
C 深度剖析教程35 函式模板的概念和意義
c 中有幾種變數交換的方法?定義巨集 塊和定義函式 include include using namespace std define swap t,a,b do while 0 void swap int a,int b void swap double a,double b void swap...
C 深度剖析教程38 類模板深度剖析
類模板可以定義任意多個不同的型別引數 類模板可以被特化 類模板的特化型別 看 include include using namespace std template typename t1,typename t2 class test template typename t1,typename t...