中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++中的繼承關系是什么

發布時間:2022-03-28 13:54:41 來源:億速云 閱讀:145 作者:iii 欄目:大數據

這篇文章主要介紹了c++中的繼承關系是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇c++中的繼承關系是什么文章都會有所收獲,下面我們一起來看看吧。

1 什么是繼承

繼承概念

繼承(inheritance)機制是面向對象程序設計使代碼可以復用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加功能。這樣產生新的類,稱派生類。繼承呈現了面向對象程序設計的層次結構,體現了由簡單到復雜的認知過程。

  面向對象的繼承關系指類之間的父子關系。用類圖表示如下:

c++中的繼承關系是什么

2 為什么要有繼承?/ 繼承的意義?

  因為繼承是面向對象中代碼復用的一種手段。通過繼承,可以獲取父類的所有功能,也可以在子類中重寫父類已有的功能 以及 添加父類中沒有的功能。

3如何理解 子類是特殊的父類?

  因為子類不僅繼承了父類所有的屬性與行為,而且在子類中還可以重寫父類已有的功能,以及添加自己的新屬性與新方法。這也就是說子類對象可以當作父類對象使用。

4 繼承的規則

  1) 子類是特殊的父類

  2) 子類對象可以直接初始化父類對象

  3) 子類對象可以直接賦值給父類對象

5 繼承中的訪問級別

  1)public:在類的內部和外部都可以訪問。

  2)protected::可以在類的內部使用,不可以在類的外部直接使用。,但是存在繼承關系時,可以在子類中使用父類的protected的成員。

  3)private:只可以在類的內部使用,不可以在類的外部使用。

  注:類的內部:在當前類的作用域中(不包括子類的作用域);類的外部:類內部之外的作用域(包括子類的作用域)

  問題1:子類是否可以直接訪問父類中的private成員(非公有成員)嗎?(No)

    1)從面向對象理論的角度分析,可知子類擁有父類一切的屬性與行為,得出的結論:Yes

    2)從c++的語法角度分析,可知外界不能訪問類的private成員,得出的結論:No

  問題2:談談 protected關鍵字的存在的意義?

    protected關鍵字是為繼承而存在的,這樣就可以在子類中訪問父類的protected成員,同時還不允許外界直接訪問父類中的protected成員。

  問題3:在類中如何選擇類的訪問級別?--- 見下圖

c++中的繼承關系是什么

6 繼承中的繼承方式

  1)public 繼承方式 --- 父類成員在子類中保持原有的訪問級別。

  2)protected繼承方式 ---父類中的公有成員在子類中變成了protected成員,其它不變。

  3)private 繼承方式(默認) --- 父類成員在子類中變成了private成員

   可歸納為:

c++中的繼承關系是什么

    結論:無論選擇哪種繼承方式,都不會影響子類訪問父類成員的級別

  注:1) c++ 工程項目中只使用 public 繼承方式;

    2) c++ 派生語言(jave,c#)只支持 public繼承方式;

    3)protected、private 繼承方式帶來的復雜性遠大于其實用性;(舍棄不用)

用代碼實現類圖中的功能:

c++中的繼承關系是什么

  代碼如下:

 #include <iostream>
  #include <string>
  #include <sstream>
  
  using namespace std;
  
 class Object
  {
  protected:
     string mName;
     string mInfo;
 public:
     Object()
     {
         mName = "Object";
         mInfo = "";
     }
     inline string getName()
     {
         return mName;
     }
     inline string getInfo()
     {
         return mInfo;
     }
 };
 
 class Point : public Object
 {
 private:
     int mX;
     int mY;
 public:
     Point(int x = 0, int y = 0)
     {
         ostringstream oss;
 
         mX = x;
         mY = y;
         mName = "Point";
         
         oss << "Point(" << mX << ", " << mY << ")";
         mInfo = oss.str();
     }
     inline int getX()
     {
         return mX;
     }
     inline int getY()
     {
         return mY;
     }
 };
 
 class Line : public Object
 {
 private:
     Point mP1;
     Point mP2;
 public:
     Line(Point p1, Point p2)
     {
         mP1 = p1;
         mP2 = p2;
         mName = "Line"; 
         mInfo = "Line from " + p1.getInfo() + " to " + p2.getInfo();
     }
     inline Point getStartPoint()
     {
         return mP1;
     }
     inline Point getEndPoint()
     {
         return mP2;
     }
 };
 
 int main(int argc, char const *argv[])
 {
     Object obj;
     cout << obj.getName() << endl;
     cout << obj.getInfo() << endl << endl;
 
     Point p1(1, 2);
     Point p2(3, 4);
     cout << p1.getName() << endl;
     cout << p1.getInfo() << endl;
     cout << p2.getName() << endl;
     cout << p2.getInfo() << endl << endl;
 
     Line line(p1, p2);
     cout << line.getName() << endl;
     cout << line.getInfo() << endl << endl;
 
     return 0;
 }

關于“c++中的繼承關系是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“c++中的繼承關系是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

丹江口市| 广德县| 涿鹿县| 绥棱县| 和平县| 荆州市| 高雄县| 淳化县| 镇平县| 安陆市| 怀来县| 定日县| 铜梁县| 宁海县| 沐川县| 三河市| 濉溪县| 瓮安县| 通榆县| 蒲江县| 吴忠市| 高阳县| 芷江| 潞城市| 文登市| 竹溪县| 西吉县| 隆尧县| 中阳县| 济源市| 万州区| 双桥区| 即墨市| 丰镇市| 吴堡县| 武宣县| 平塘县| 翁源县| 台东市| 宁陵县| 台南市|