在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ 繼承
動(dòng)態(tài)內(nèi)存
類和對(duì)象
接口 (抽象類)
結(jié)構(gòu)體
循環(huán)的類型
函數(shù)
數(shù)字
日期和時(shí)間
基本語(yǔ)法
多態(tài)
數(shù)據(jù)抽象
注釋
命名空間
字符串
預(yù)處理器
決策語(yǔ)句
修飾符的類型
鍙橀噺綾誨瀷
基本輸入輸出
操作符
數(shù)組
模板
多線程
繼承
Web 編程
信號(hào)處理
指針
存儲(chǔ)類型
概述
引用
常量
異常處理
開(kāi)發(fā)環(huán)境
重載
變量作用域
數(shù)據(jù)類型
數(shù)據(jù)封裝
文件和流

繼承

在面向?qū)ο缶幊讨凶钪匾母拍钪痪褪抢^承。繼承允許我們根據(jù)一個(gè)類來(lái)定義另一個(gè)類,這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序更加的容易。這也提供了一個(gè)重用代碼功能和快速實(shí)現(xiàn)的機(jī)會(huì)。

當(dāng)創(chuàng)建一個(gè)類,不是寫(xiě)全新的數(shù)據(jù)成員和成員函數(shù)的時(shí)候,程序員可以指定新類,這個(gè)類可以繼承現(xiàn)有類的成員。這個(gè)現(xiàn)有的類稱為基類,這個(gè)新類稱為派生類。

繼承的概念其實(shí)是一種關(guān)系。例如,哺乳動(dòng)物是動(dòng)物,狗是哺乳動(dòng)物,因此狗是動(dòng)物等等。

基類和派生類

一個(gè)類可以繼承多個(gè)類,這就意味著它可以從多個(gè)基類中繼承數(shù)據(jù)和函數(shù)。為了定義一個(gè)派生類,我們可以使用一個(gè)類繼承列表來(lái)指定基類。一個(gè)類繼承列表指定一個(gè)或多個(gè)基類,類繼承列表形式如下:

    class derived-class: access-specifier base-class

在這里 access-specifier 是 public 、 protected 或者 private ,base-class 是之前定義的類的名稱。如果不使用 access-specifier ,那么在默認(rèn)情況下它是私有的。

考慮一個(gè)基類的 shape 和其派生類 Rectangle 的繼承情況如下:

    #include <iostream>

    using namespace std;

    // Base class
    class Shape 
    {
       public:
      void setWidth(int w)
      {
     width = w;
      }
      void setHeight(int h)
      {
     height = h;
      }
       protected:
      int width;
      int height;
    };

    // Derived class
    class Rectangle: public Shape
    {
       public:
      int getArea()
      { 
     return (width * height); 
      }
    };

    int main(void)
    {
       Rectangle Rect;

       Rect.setWidth(5);
       Rect.setHeight(7);

       // Print the area of the object.
       cout << "Total area: " << Rect.getArea() << endl;

       return 0;
    }

上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:

    Total area: 35

訪問(wèn)控制和繼承

一個(gè)派生類可以訪問(wèn)所有它的基類的非公有類型的成員。因此不希望被派生類的成員函數(shù)訪問(wèn)的基類成員應(yīng)該在基類中聲明為私有類型。

我們可以根據(jù)誰(shuí)能訪問(wèn)它們總結(jié)出不同的訪問(wèn)類型,如下表格中所示:

訪問(wèn)權(quán)限 public protected private
同一個(gè)類
派生類
類外成員

派生類繼承了基類的所有方法,以下情況除外:

  • 基類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝構(gòu)造函數(shù)?!   ?/li>
  • 基類的重載操作符?!?/li>
  • 基類的友元函數(shù)。

繼承方式

當(dāng)從一個(gè)基類派生一個(gè)子類的時(shí)候,公共基類可以通過(guò) public ,protected ,或者 private 方式被繼承。繼承方式被 access-specifier 指定,正如上面解釋的。

我們幾乎不使用protected或私有private 繼承,但public繼承是常用的。在使用不同類型的繼承的時(shí)候,應(yīng)用規(guī)則如下:

  • public 繼承:當(dāng)從一個(gè)公有基類派生一個(gè)類的時(shí)候,基類的公有成員成為派生類的公有成員;基類的保護(hù)成員成為派生類的保護(hù)成員。一個(gè)基類的私有成員不能被派生類直接訪問(wèn),但可以通過(guò)調(diào)用基類的公有和保護(hù)成員訪問(wèn)基類的私有成員。
  • protected 繼承:當(dāng)從一個(gè)受保護(hù)的基類派生子類的時(shí)候,基類的公有和保護(hù)成員成為派生類的保護(hù)成員。
  • private 繼承:當(dāng)從一個(gè)私有的基類派生子類的時(shí)候,基類的公有和保護(hù)成員成為派生類的私有成員。

多繼承

一個(gè)C++類可以繼承多個(gè)類的成員,多繼承語(yǔ)法如下:

    class derived-class: access baseA, access baseB....

在這里 access 是 public ,protected ,或者是 private ,并且每一個(gè)基類將有一個(gè) access 類型,他們將由逗號(hào)分隔開(kāi),如上所示。讓我們?cè)囋囅旅娴睦樱?/p>

    #include <iostream>
    using namespace std;

    // Base class Shape
    class Shape 
    {
       public:
      void setWidth(int w)
      {
     width = w;
      }
      void setHeight(int h)
      {
     height = h;
      }
       protected:
      int width;
      int height;
    };

    // Base class PaintCost
    class PaintCost 
    {
       public:
      int getCost(int area)
      {
     return area * 70;
      }
    };

    // Derived class
    class Rectangle: public Shape, public PaintCost
    {
       public:
      int getArea()
      { 
     return (width * height); 
      }
    };

    int main(void)
    {
       Rectangle Rect;
       int area;

       Rect.setWidth(5);
       Rect.setHeight(7);

       area = Rect.getArea();

       // Print the area of the object.
       cout << "Total area: " << Rect.getArea() << endl;

       // Print the total cost of painting
       cout << "Total paint cost: $" << Rect.getCost(area) << endl;

       return 0;
    }

上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:

    Total area: 35
    Total paint cost: $2450
上一篇:日期和時(shí)間下一篇:函數(shù)