C++類的繼承覆蓋和隱藏區(qū)別

c++
小樊
82
2024-10-31 10:46:56

在C++中,類的繼承、覆蓋和隱藏是面向?qū)ο缶幊痰闹匾拍?/p>

  1. 繼承(Inheritance): 繼承是一種創(chuàng)建新類的方式,新類繼承了現(xiàn)有類的屬性和方法。這樣,新類可以重用現(xiàn)有類的代碼,并可以對(duì)其進(jìn)行擴(kuò)展或修改。繼承的主要目的是實(shí)現(xiàn)代碼的重用和實(shí)現(xiàn)多態(tài)性。在C++中,使用冒號(hào)(:)和訪問修飾符(public, protected, private)來表示繼承關(guān)系。例如:
class Base {
public:
    void foo() {
        // ...
    }
};

class Derived : public Base {
    // ...
};
  1. 覆蓋(Overriding): 覆蓋是指子類重新定義了父類中的虛函數(shù)。當(dāng)子類對(duì)象調(diào)用該虛函數(shù)時(shí),將執(zhí)行子類中的實(shí)現(xiàn),而不是父類中的實(shí)現(xiàn)。覆蓋的主要目的是實(shí)現(xiàn)多態(tài)性。在C++中,使用virtual關(guān)鍵字來表示虛函數(shù),并在子類中重新定義該函數(shù)。例如:
class Base {
public:
    virtual void foo() {
        // ...
    }
};

class Derived : public Base {
public:
    void foo() override {
        // ...
    }
};
  1. 隱藏(Hiding): 隱藏是指子類中的函數(shù)與父類中的非虛函數(shù)同名,導(dǎo)致子類對(duì)象在調(diào)用該函數(shù)時(shí)只能訪問子類中的實(shí)現(xiàn),而不能訪問父類中的實(shí)現(xiàn)。隱藏并不是多態(tài)的一種形式,因?yàn)樗荒芡ㄟ^基類指針或引用調(diào)用子類中的實(shí)現(xiàn)。在C++中,如果子類中的函數(shù)與父類中的非虛函數(shù)同名,子類將隱藏父類中的函數(shù)。例如:
class Base {
public:
    void foo() {
        // ...
    }
};

class Derived : public Base {
public:
    void foo() {
        // ...
    }
};

總結(jié)一下,繼承是一種創(chuàng)建新類的方式,允許子類重用父類的代碼;覆蓋是指子類重新定義了父類中的虛函數(shù),實(shí)現(xiàn)多態(tài)性;隱藏是指子類中的函數(shù)與父類中的非虛函數(shù)同名,導(dǎo)致子類對(duì)象只能訪問子類中的實(shí)現(xiàn)。

0