【C++深度剖析教程22】继承的概念和意义
今天我們來學習C++中的繼承的概念和意義。
一、類之間的組合關系
問題:類之間是否存在直接的關聯關系? 
 回答:類之間存在組合的關系,整體與部分的關系。 
 可以看一下生活中的例子: 
  
 下面我們以一個簡單的程序來看一下類組合的關系:
運行結果為: 
 Memory() 
 Disk() 
 CPU() 
 MainBoard() 
 Computer() 
 ~Computer() 
 ~MainBoard() 
 ~CPU() 
 ~Disk() 
 ~Memory()
從上面程序我們可以看出組合關系的特點是:
- 將其他類的對象作為當前類的成員使用
- 當前類的對象與成員對象的生命周期相同
- 成員對象與普通對象在語法上完全相同
二、類之間的繼承關系
還是先看一個生活中的實例: 
 
那么繼承關系有什么樣的性質呢?
面向對象的繼承就是指類之間的父子關系
- 子類擁有父類的所有屬性和行為
- 子類就是一種特殊的父類
- 子類對象可以當做父類對象使用
- 子類中可以添加父類沒有的屬性和方法
C++中通過下面的方式描述繼承的關系 
 
下面還是來用一個例子程序來分析繼承的關系吧:
#include <iostream> #include <string>using namespace std;class Parent {int mv; public:Parent(){cout << "Parent()" << endl;mv = 100;}void method(){cout << "mv = " << mv << endl;} };class Child : public Parent { public:void hello(){cout << "I'm Child calss!" << endl;} };int main() { Child c;c.hello();c.method();return 0; }運行結果為: 
 Parent() 
 I’m Child calss! 
 mv = 100 
 由運行結果可以看出,當執行Child c創建類c時,就直接調用了父類的構造函數進行打印語句。然后執行 c.hello();c.method();這兩個語句時,分別調用孩子類的成員函數與父親類的成員函數,這說明孩子對象可以直接調用父親的成員函數和本身自己的成員函數。
繼承的重要規則:
- 子類就是一個特殊的父類
- 子類對象可以直接初始化父類對象
- 子類對象可以直接賦值給父類對象
繼承的意義: 
 繼承是C++中代碼復用的重要手段。通過繼承,可以獲得父類的所有功能,并且可以在子類中重寫已有功能,或者添加新功能。
下面再來一個例子看看繼承的規則與意義:
#include <iostream> #include <string>using namespace std;class Memory { public:Memory(){cout << "Memory()" << endl;}~Memory(){cout << "~Memory()" << endl;} };class Disk { public:Disk(){cout << "Disk()" << endl;}~Disk(){cout << "~Disk()" << endl;} };class CPU { public:CPU(){cout << "CPU()" << endl;}~CPU(){cout << "~CPU()" << endl;} };class MainBoard { public:MainBoard(){cout << "MainBoard()" << endl;}~MainBoard(){cout << "~MainBoard()" << endl;} };class Computer {Memory mMem;Disk mDisk;CPU mCPU;MainBoard mMainBoard; public:Computer(){cout << "Computer()" << endl;}void power(){cout << "power()" << endl;}void reset(){cout << "reset()" << endl;}~Computer(){cout << "~Computer()" << endl;} };class HPBook : public Computer {string mOS; public:HPBook(){mOS = "Windows 8";}void install(string os){mOS = os;}void OS(){cout << mOS << endl;} };class MacBook : public Computer { public:void OS(){cout << "Mac OS" << endl;} };int main() { HPBook hp;hp.power();hp.install("Ubuntu 16.04 LTS");hp.OS();cout << endl;MacBook mac;mac.OS();return 0; }運行結果為: 
 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類的所有行為。
由以上幾個程序的分析可以得出以下幾條總結:
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿): 
 qq:1126137994 
 微信:liu1126137994 
 可以共同交流關于嵌入式,操作系統,C++語言,C語言,數據結構等技術問題。
總結
以上是生活随笔為你收集整理的【C++深度剖析教程22】继承的概念和意义的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: git如何设置master分支的权限_G
- 下一篇: 思源黑体字体问题
