日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【C++深度剖析教程22】继承的概念和意义

發布時間:2023/12/10 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++深度剖析教程22】继承的概念和意义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天我們來學習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;} };int main() { Computer c; //電腦類的創建,依賴于前面四個類的創建return 0; }

運行結果為:
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】继承的概念和意义的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。