国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】繼承和多態(tài)、共有私有和保護、重寫

這篇具有很好參考價值的文章主要介紹了【C++】繼承和多態(tài)、共有私有和保護、重寫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

繼承與多態(tài)的概念

	面向?qū)ο笕笤瓌t:封裝、繼承、多態(tài)。
  • 繼承是一種機制,通過它一個類可以從另一個類繼承屬性和方法。派生類(子類)繼承基類(父類)的成員函數(shù)和數(shù)據(jù)成員,并且可以在其基礎(chǔ)上擴展自己的成員函數(shù)和數(shù)據(jù)成員。C++支持多重繼承,即一個派生類可以同時從多個基類中繼承。

  • 多態(tài)是指同一種操作作用于不同的對象上面,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。在C++中,實現(xiàn)多態(tài)需要借助虛函數(shù)。虛函數(shù)是在基類中聲明的函數(shù),派生類可以對其進行重寫,從而實現(xiàn)不同的功能。當(dāng)通過指向基類的指針或引用調(diào)用虛函數(shù)時,程序會根據(jù)實際指向的對象類型來調(diào)用相應(yīng)的函數(shù),這種行為稱為動態(tài)綁定,即在運行時確定調(diào)用的函數(shù)。

繼承與多態(tài)的區(qū)別與聯(lián)系

繼承是指子類從父類繼承屬性和方法的過程,子類可以重寫(override)父類的方法,以實現(xiàn)自己的特定功能。繼承可以簡化代碼,減少重復(fù)的代碼量,并且可以通過繼承實現(xiàn)代碼的復(fù)用。

多態(tài)是指同一種方法在不同對象上產(chǎn)生不同的行為。在多態(tài)的實現(xiàn)中,通常采用父類指針指向子類對象的方式,這樣就可以通過父類指針調(diào)用子類方法,實現(xiàn)不同的行為。多態(tài)可以提高代碼的靈活性和可擴展性,使得程序更易于維護和擴展。

區(qū)別:

  • 繼承是一種代碼復(fù)用的方式,可以從父類繼承屬性和方法;多態(tài)則是一種代碼執(zhí)行的方式,同一個方法在不同對象上有不同的行為。

  • 繼承是一種靜態(tài)的關(guān)系,類在編譯時就確定了其繼承關(guān)系;多態(tài)則是一種動態(tài)的關(guān)系,運行時才能確定具體的行為。

  • 繼承是一種自上而下的設(shè)計方式,父類是子類的模板;多態(tài)則是一種自下而上的設(shè)計方式,子類決定了父類的行為。

聯(lián)系:

  • 繼承和多態(tài)都是面向?qū)ο缶幊痰闹匾拍?,它們都是實現(xiàn)代碼復(fù)用、提高代碼靈活性和可擴展性的重要方式。

  • 多態(tài)需要繼承作為前提,因為父類指針可以指向子類對象,才能實現(xiàn)多態(tài)的效果。

示例

#include <iostream>
using namespace std;

// 基類
class Shape {
   protected:
      int width, height;

   public:
      Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }
      virtual int area() {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

// 派生類
class Rectangle: public Shape {
   public:
      Rectangle( int a = 0, int b = 0):Shape(a, b) { }

      int area () { 
         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};

// 派生類
class Triangle: public Shape{
   public:
      Triangle( int a = 0, int b = 0):Shape(a, b) { }

      int area () { 
         cout << "Triangle class area :" <<endl;
         return (width * height / 2); 
      }
};

int main( ) {
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);

   // 存儲矩形的地址
   shape = &rec;
   // 調(diào)用矩形的求面積函數(shù) area
   shape->area();

   // 存儲三角形的地址
   shape = &tri;
   // 調(diào)用三角形的求面積函數(shù) area
   shape->area();
   
   return 0;
}

結(jié)果:

【C++】繼承和多態(tài)、共有私有和保護、重寫

可以看到,程序中定義了一個基類 Shape 和兩個派生類 Rectangle 和 Triangle,兩個派生類公有繼承基類的屬性和方法,并且重寫了基類的虛函數(shù) area()。在 main() 函數(shù)中,首先創(chuàng)建了一個指向基類的指針 shape,然后將其分別指向 Rectangle 和 Triangle 對象。最后通過指針調(diào)用虛函數(shù)。shape指針兩次調(diào)用area方法,但是由于該指針指向的是不同對象,他會根據(jù)對象的類型來輸出不同的結(jié)果,這就是多態(tài)。

繼承和訪問的權(quán)限

在 C++ 中,類繼承分為三種類型:public、protected 和 private。它們分別表示基類成員在派生類中的訪問權(quán)限:

  • public 繼承:基類中的 public 成員在派生類中仍然是 public 的,基類中的 protected 成員在派生類中仍然是 protected 的,基類中的 private 成員仍然是私有的,private成員不能被派生類訪問。

  • protected 繼承:基類中的 public 成員在派生類中變成 protected 的,基類中的 protected 成員在派生類中仍然是 protected 的,并且只能被他的派生類成員函數(shù)和友元函數(shù)所訪問,基類中的 private 成員不能被派生類訪問。

  • private 繼承:基類中的 public 和 protected 成員在派生類中變成 private 的,基類中的 private 成員不能被派生類訪問。

說明

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Derived1 : public Base {
    // a是public的,b是protected的,c不能訪問
};

class Derived2 : protected Base {
    // a是protected的,b是protected的,c不能訪問
};

class Derived3 : private Base {
    // a是private的,b是private的,c不能訪問
};

示例:

#include <iostream>

using namespace std;

class Parent {
public:
    void publicMethod() {
        cout << "This is a public method of Parent class." << endl;
    }

protected:
    void protectedMethod() {
        cout << "This is a protected method of Parent class." << endl;
    }

private:
    void privateMethod() {
        cout << "This is a private method of Parent class." << endl;
    }
};

class Child : public Parent {
public:
    void callParentMethods() {
        publicMethod();     // 公有方法可以在子類中直接訪問
        protectedMethod();  // 保護方法可以在子類中直接訪問
        // privateMethod();    // 私有方法不能在子類中直接訪問
    }
};

int main() {
    Child childObj;
    childObj.publicMethod();     // 公有方法可以在子類對象中直接訪問
    // childObj.protectedMethod();  // 保護方法不能在子類對象中直接訪問
    // childObj.privateMethod();    // 私有方法不能在子類對象中直接訪問

    childObj.callParentMethods(); // 子類中的方法可以調(diào)用父類的公有和保護方法

    return 0;
}

在這個示例程序中,Parent類有三個成員方法,分別為publicMethod()、protectedMethod()privateMethod(),它們的訪問權(quán)限分別為public、protected和private。Child類繼承了Parent類,并在其中定義了一個方法callParentMethods(),用于調(diào)用Parent類的publicMethod()和protectedMethod()方法。在main函數(shù)中,我們創(chuàng)建了一個Child類的對象childObj,并演示了不同的訪問方式和權(quán)限。

結(jié)果

【C++】繼承和多態(tài)、共有私有和保護、重寫

從這個示例程序中可以看出,public成員可以在任何地方被訪問,包括在子類中和子類對象中;protected成員只能在子類和子類對象中被訪問;private成員只能在類的內(nèi)部被訪問,包括子類中也不能訪問。

**提示:**如果把繼承方式改為私有繼承或保護繼承,那么main函數(shù)中的

childObj.publicMethod();

語句也會報錯,因為保護或私有繼承過來之后,公有方法的權(quán)限就變了,子類對象不能訪問私有或保護的方法,那就更不能訪問基類的公有方法了。

結(jié)論

【C++】繼承和多態(tài)、共有私有和保護、重寫文章來源地址http://www.zghlxwxcb.cn/news/detail-438317.html

到了這里,關(guān)于【C++】繼承和多態(tài)、共有私有和保護、重寫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C++】多態(tài)的概念和簡單介紹、虛函數(shù)、虛函數(shù)重寫、多態(tài)構(gòu)成的條件、重載、重寫、重定義

    【C++】多態(tài)的概念和簡單介紹、虛函數(shù)、虛函數(shù)重寫、多態(tài)構(gòu)成的條件、重載、重寫、重定義

    ? ??C++中的多態(tài)是一種面向?qū)ο缶幊痰奶匦裕?它允許不同的對象對同一個消息做出不同的響應(yīng)。 多態(tài)性能夠提高代碼的可復(fù)用性和靈活性,使得代碼更加模塊化和可擴展。 ?? 多態(tài)性是通過使用繼承和虛函數(shù)實現(xiàn)的。 當(dāng)一個類被聲明為虛函數(shù)時,它可以被子類重寫,并

    2024年02月13日
    瀏覽(25)
  • 【C++進階】繼承、多態(tài)的詳解(多態(tài)篇)

    【C++進階】繼承、多態(tài)的詳解(多態(tài)篇)

    作者:愛寫代碼的剛子 時間:2023.8.16 前言:本篇博客主要介紹C++中多態(tài)有關(guān)的知識,是C++中的一大難點,剛子將帶你深入C++多態(tài)的知識。(該博客涉及到的代碼是在x86的環(huán)境下,如果是在x86_64環(huán)境下指針的大小可能需要變成8bytes) 多態(tài)的概念 多態(tài)的概念:通俗來說,就是多

    2024年02月12日
    瀏覽(30)
  • 【C++進階】繼承、多態(tài)的詳解(繼承篇)

    【C++進階】繼承、多態(tài)的詳解(繼承篇)

    作者:愛寫代碼的剛子 時間:2023.7.28 前言:本篇博客主要介紹C++進階部分內(nèi)容——繼承,C++中的繼承和多態(tài)是比較復(fù)雜的,需要我們認(rèn)真去深挖其中的細(xì)節(jié)。 繼承的概念及定義 繼承的概念 繼承(inheritance)機制是面向?qū)ο蟪绦蛟O(shè)計使代碼可以復(fù)用的最重要的手段,它允許程序

    2024年02月13日
    瀏覽(22)
  • 【C++】繼承和多態(tài)

    【C++】繼承和多態(tài)

    繼承機制是面向?qū)ο蟪绦蛟O(shè)計使代碼可以 復(fù)用 的最重要的手段,它允許程序員在保持原有類特性的基礎(chǔ)上進行 擴展 ,增加功能,這樣產(chǎn)生新的類,稱 派生類/子類 。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的層次結(jié)構(gòu),體現(xiàn)了由簡單到復(fù)雜的認(rèn)知過程。以前我們接觸的復(fù)用都是函數(shù)復(fù)

    2024年02月06日
    瀏覽(24)
  • C++ 中的繼承和多態(tài)

    C++ 中的繼承和多態(tài)

    繼承允許我們 依據(jù)一個類來定義另一個類 ,這使得創(chuàng)建和維護一個應(yīng)用程序變得更容易。這樣做也達到了重用代碼功能和提高執(zhí)行效率的效果。 派生類的成員可以直接訪問基類的保護成員(protected),但不能直接訪問基類的私有成員(private) 。不過需要注意的是,派生類

    2024年02月06日
    瀏覽(24)
  • C++基礎(chǔ)篇:07 繼承與多態(tài)

    ????????當(dāng)遇到問題,先看一下現(xiàn)有的類是否能夠解決一部分問題,如果有則繼承,并在此基礎(chǔ)上進行擴展來解決所有問題,以此縮短解決問題的時間(代碼復(fù)用) ????????當(dāng)遇到一個大而復(fù)雜的問題時,可以把復(fù)雜問題拆分成若干個小問題,為每個小問題的解決設(shè)計一

    2024年02月08日
    瀏覽(20)
  • c++面向?qū)ο笾庋b、繼承、和多態(tài)

    c++面向?qū)ο笾庋b、繼承、和多態(tài)

    把客觀事物封裝成類,而且可以把自己的數(shù)據(jù)和方法設(shè)置為只能讓可信的類或者對象操作,對不可信的信息進行隱藏(利用public,private,protected,friend)實現(xiàn) has-a :描述一個類由多個部件類構(gòu)成,一個類的成員屬性是另一個已經(jīng)定義好的類。 use-a:一個類使用另一個類,通過類之間

    2024年02月02日
    瀏覽(17)
  • C++ 面向?qū)ο蠛诵?繼承、權(quán)限、多態(tài)、抽象類)

    繼承(Inheritance)是面向?qū)ο缶幊讨械囊粋€重要概念,它允許一個類(稱為派生類或子類)從另一個類(稱為基類或父類)繼承屬性和方法。繼承是實現(xiàn)類之間的關(guān)系,通過繼承,子類可以重用父類的代碼,并且可以在此基礎(chǔ)上添加新的功能或修改已有的功能。 在C++中,繼承

    2024年02月08日
    瀏覽(28)
  • C++ 第三彈繼承和多態(tài)-類和對象

    C++ 第三彈繼承和多態(tài)-類和對象

    目錄 1.繼承 1.1什么是繼承? 1.2語法格式 1.3繼承權(quán)限 1.4繼承概念語法格式 1.5賦值兼容規(guī)則 1.6繼承體系中的作用域 1.7在繼承體系中的構(gòu)造和析構(gòu) 1.8靜態(tài)成員繼承 1.9友元的繼承 1.10不同繼承方式下子類的對象模型 1.11繼承和組合 2.多態(tài) 2.1什么是多態(tài) 2.2多態(tài)的分類 2.3實現(xiàn)條件

    2024年02月10日
    瀏覽(22)
  • c++入門學(xué)習(xí)⑦——繼承和多態(tài)(超級詳細(xì)版)

    c++入門學(xué)習(xí)⑦——繼承和多態(tài)(超級詳細(xì)版)

    目錄 前言 繼承 繼承是什么? 為什么會存在繼承? 語法: 一些基本的定義: 三種繼承方式: 對象模型 對于構(gòu)造和析構(gòu)的順序 同名函數(shù)的處理方式 總結(jié): 靜態(tài)成員: 定義: 性質(zhì): 共享數(shù)據(jù)? 編譯階段分配內(nèi)存 類內(nèi)聲明類外初始化 靜態(tài)成員函數(shù) 靜態(tài)成員函數(shù)與普通成員

    2024年02月21日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包