亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文帶你學(xué)習(xí)C++中的派生機(jī)制

 更新時(shí)間:2023年04月13日 15:12:16   作者:碼出世界的淡水魚  
C++是一門面向?qū)ο蟮木幊陶Z言,其中的派生機(jī)制是其重要的面向?qū)ο筇匦灾?。本文我們就來詳?xì)地學(xué)習(xí)一下C++中的派生機(jī)制的相關(guān)知識吧

C++是一門面向?qū)ο蟮木幊陶Z言,其中的派生機(jī)制是其重要的面向?qū)ο筇匦灾?。派生是建立在現(xiàn)有類的基礎(chǔ)之上,創(chuàng)建一個(gè)新的類的過程。在新類中,可以利用父類中定義的變量和方法,并且可以添加新的成員變量和方法。

下面我們來詳細(xì)地學(xué)習(xí)C++中的派生機(jī)制。

一、派生的類型

C++支持以下幾種派生類型:

1.公有派生: 在公有派生中,派生類可以訪問基類中的公有成員和受保護(hù)成員,但不能訪問基類中的私有成員。公有派生通常用于向基類添加新的特征和行為。

示例代碼如下:

class Base {
public:
    int public_var;
protected:
    int protected_var;
private:
    int private_var;
};

class Derived : public Base {
public:
    void setVar(int a, int b, int c)
    {
        public_var = a;  //公有成員可以在派生類中訪問
        protected_var = b;  //受保護(hù)成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

2.保護(hù)派生: 在保護(hù)派生中,派生類可以訪問基類中的公有成員和受保護(hù)成員,但不能訪問基類中的私有成員。保護(hù)派生通常用于繼承,即將基類的所有成員和方法都繼承到派生類中。

示例代碼如下:

class Base {
public:
    int public_var;
protected:
    int protected_var;
private:
    int private_var;
};

class Derived : protected Base {
public:
    void setVar(int a, int b, int c)
    {
        public_var = a;  //公有成員可以在派生類中訪問
        protected_var = b;  //受保護(hù)成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

3.私有派生: 在私有派生中,派生類可以訪問基類中的公有成員和受保護(hù)成員,但不能訪問基類中的私有成員。私有派生通常用于“隱藏”繼承,即對基類進(jìn)行改進(jìn)或擴(kuò)展,但不公開基類的接口。

示例代碼如下:

class Base {
public:
    int public_var;
protected:
    int protected_var;
private:
    int private_var;
};

class Derived : private Base {
public:
    void setVar(int a, int b, int c)
    {
        public_var = a;  //公有成員可以在派生類中訪問
        protected_var = b;  //受保護(hù)成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

二、派生的語法

在C++中,派生的語法為:

class Derived_class : access_specifier Base_class {
    // 包含新成員和覆蓋的函數(shù)等
};

其中,Derived_class 是基于 Base_class 的派生類。access_specifier 表示派生類型,可以是 public、protected 或 private。新的成員和覆蓋的函數(shù)等是指在派生類中添加的成員和方法。

示例代碼如下:

class Base {
public:
    void print() {
        std::cout << "Base" << std::endl;
    }
};

class Derived : public Base {
public:
    void print() {
        std::cout << "Derived" << std::endl;
    }
};

int main()
{
    Base b;
    Derived d;

    b.print(); //輸出 Base
    d.print(); //輸出 Derived

    return 0;
}

上述代碼中,Base 類中定義了一個(gè) print() 方法,輸出 Base。Derived 類繼承自 Base 類,并定義了一個(gè)同名的 print() 方法,輸出 Derived。在 main 函數(shù)中,分別創(chuàng)建了 Base 類和 Derived 類的對象并分別調(diào)用了它們的 print() 方法。結(jié)果顯示,派生類覆蓋了其基類的同名方法。

三、多重繼承

C++還支持多重繼承,即一個(gè)派生類從多個(gè)基類派生而來。具體地,可以這樣建立一個(gè)派生類:

class Derived : access_specifier Base1, access_specifier Base2, ... {
    // 包含新成員和覆蓋的函數(shù)等
};

其中,Derived 是一個(gè)派生類,Base1、Base2 是兩個(gè)基類,可以有多個(gè)基類。access_specifier 表示該基類在派生類中的訪問權(quán)限,可以是 public、protected 或 private。

示例代碼如下:

class Base1 {
public:
    void print1() {
        std::cout << "Base1" << std::endl;
    }
};

class Base2 {
public:
    void print2() {
        std::cout << "Base2" << std::endl;
    }
};

class Derived : public Base1, protected Base2 {
public:
    void print() {
        print1();
        //print2(); //private 成員不能在派生類之外的成員函數(shù)中訪問
    }
};

int main()
{
    Derived d;
    d.print();

    return 0;
}

上述代碼中,定義了兩個(gè)基類 Base1 和 Base2,分別有各自的方法 print1() 和 print2()。派生類 Derived 繼承自 Base1 和 Base2,由于 Base2 的訪問權(quán)限設(shè)置為 protected,在 Derived 中,只有成員函數(shù)可以訪問 Base2 中的成員。Derived 中定義的 print() 方法分別調(diào)用了 Base1 和 Base2 中的方法,結(jié)果顯示,多重繼承能夠在派生類中同時(shí)使用多個(gè)基類的成員,并進(jìn)行靈活的訪問權(quán)限設(shè)置。

四、虛繼承

當(dāng)一個(gè)類同時(shí)從多個(gè)基類繼承,而這些基類中又有共同的基類時(shí),就會(huì)出現(xiàn)“二義性”的問題。為了解決這個(gè)問題,C++引入了虛繼承機(jī)制。

虛繼承使用關(guān)鍵字 virtual,它告訴編譯器,在繼承鏈中只保留一份共同的基類,從而避免了多次繼承造成的冗余。另外,虛繼承還規(guī)定了一個(gè)虛基類列表。虛基類列表中的類在繼承鏈中只繼承一次,并且會(huì)在最深層的派生類中進(jìn)行初始化。

示例代碼如下:

class Root {
public:
    int i;
};

class A : public virtual Root {
public:
    int j;
};

class B : public virtual Root {
public:
    int k;
};

class C : public A, public B {
public:
    void sum() {
        i = j + k;
    }
};

int main()
{
    C c;

    c.j = 10;
    c.k = 20;
    c.sum();

    std::cout << "Sum of j and k is " << c.i << std::endl;

    return 0;
}

上述代碼中,定義了一個(gè)基類 Root,和兩個(gè)繼承了 Root 的派生類 A 和 B。類 C 同時(shí)從 A 和 B 繼承,它將 A 和 B 中的 i 合并為一份,并且在最深層的派生類 C 中進(jìn)行初始化。在 main 函數(shù)中,我們創(chuàng)建了類 C 的對象 c,并對它的成員變量 j 和 k 賦值,并通過 sum() 方法計(jì)算它們的和。

五、派生類和基類的關(guān)系

派生類和基類之間存在以下關(guān)系:

  • 派生類包含的成員都是派生類自己定義的,但它可以訪問基類的公有成員和受保護(hù)成員,也可以使用基類中的方法。
  • 派生類的對象中包含了基類的對象,即派生類的對象中包含了基類對象的成員。
  • 派生類的對象可以被看作是基類的對象,即派生類的對象可以直接賦值給基類對象。

示例代碼如下:

class Base {
public:
    int publicVar;
protected:
    int protectedVar;
private:
    int privateVar;
public:
    void print() {
        std::cout << "publicVar: " << publicVar << std::endl;
        std::cout << "protectedVar: " << protectedVar << std::endl;
        std::cout << "privateVar: " << privateVar << std::endl;
    }
};

class Derived : public Base {
public:
    int additionalVar;
public:
    void printAdditionalVar() {
        std::cout << "additionalVar: " << additionalVar << std::endl;
    }
};

int main()
{
    Derived derived;
    derived.publicVar = 1;
    //derived.protectedVar = 2;  //protected 成員不能直接在類外部訪問
    derived.print();  //基類中的公有成員和受保護(hù)成員可以在派生類對象中訪問
    derived.additionalVar = 3;
    derived.printAdditionalVar();  //派生類中的成員可以直接訪問
    Base& base = derived;  //派生類的對象可以賦值給基類對象
    base.print();  //基類中的成員可以在基類對象中訪問
    return 0;
}

上述代碼中,定義了一個(gè)基類 Base 和一個(gè)派生類 Derived。在 main 函數(shù)中,我們首先創(chuàng)建了一個(gè) Derived 的對象 derived,可以看到它可以訪問由其基類 Base 中繼承的成員變量和方法。同時(shí),我們?yōu)?derived 對象中定義了一個(gè) additionalVar 成員,并定義了一個(gè)打印 additionalVar 的方法。接著,我們將 derived 對象賦值給了一個(gè) Base 類型的引用 base,并通過 base 訪問了 Base 類中的成員變量和方法。結(jié)果顯示了派生類和基類之間的關(guān)系。

六、總結(jié)

本文介紹了C++中的派生機(jī)制,包括公有派生、保護(hù)派生、私有派生、多重繼承和虛繼承等。同時(shí),文章還介紹了派生類和基類之間的關(guān)系。理解并掌握派生機(jī)制,可以提高我們在C++編程中的應(yīng)用技能。

到此這篇關(guān)于一文帶你學(xué)習(xí)C++中的派生機(jī)制的文章就介紹到這了,更多相關(guān)C++派生機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++的內(nèi)聯(lián)函數(shù)你了解嗎

    C++的內(nèi)聯(lián)函數(shù)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的內(nèi)聯(lián)函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++日期類計(jì)算器的模擬實(shí)現(xiàn)舉例詳解

    C++日期類計(jì)算器的模擬實(shí)現(xiàn)舉例詳解

    兩個(gè)日期之間相隔天數(shù)的計(jì)算網(wǎng)上有許多的軟件,這里主要介紹如何使用C/C++語言來完成這樣的功能,下面這篇文章主要給大家介紹了關(guān)于C++日期類計(jì)算器的模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • C++可執(zhí)行文件絕對路徑值與VS安全檢查詳解

    C++可執(zhí)行文件絕對路徑值與VS安全檢查詳解

    這篇文章主要給大家介紹了關(guān)于C++可執(zhí)行文件絕對路徑值與VS安全檢查的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • C和C++如何實(shí)現(xiàn)互相調(diào)用詳解

    C和C++如何實(shí)現(xiàn)互相調(diào)用詳解

    在學(xué)習(xí)c++中用到一些古老的c語言庫時(shí),在工作中我們經(jīng)常要使用C和C++混合編程,下面這篇文章主要給大家介紹了關(guān)于C和C++如何實(shí)現(xiàn)互相調(diào)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 解決在Mac下直接解壓C++靜態(tài)庫出現(xiàn)的問題

    解決在Mac下直接解壓C++靜態(tài)庫出現(xiàn)的問題

    最近在研究C++的各種編譯構(gòu)建過程,學(xué)習(xí)了一下cmake,gyp/ninja這些自動(dòng)化構(gòu)建工具后,想著自己試下用純命令行跑一遍編譯流程。在試圖把C++靜態(tài)庫編譯為動(dòng)態(tài)庫的過程中遇到了棘手的問題,找了好久后發(fā)現(xiàn)是跟Mac平臺(tái)相關(guān)的,這里記錄一下,望對遇到類似問題的童鞋有幫助。
    2016-12-12
  • C++中delete和delete[]的區(qū)別說明

    C++中delete和delete[]的區(qū)別說明

    一直對C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網(wǎng)查了一下,得出了結(jié)論。希望本文可以對你有所幫助
    2013-02-02
  • C語言system 自動(dòng)關(guān)機(jī)函數(shù)代碼

    C語言system 自動(dòng)關(guān)機(jī)函數(shù)代碼

    這篇文章主要介紹了C語言system 自動(dòng)關(guān)機(jī)函數(shù)代碼,需要的朋友可以參考下
    2016-04-04
  • 解析C++中的字符串處理函數(shù)和指針

    解析C++中的字符串處理函數(shù)和指針

    這篇文章主要介紹了解析C++中的字符串處理函數(shù)和指針,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++字符串拼接效率對比(+=、append、stringstream、sprintf)

    C++字符串拼接效率對比(+=、append、stringstream、sprintf)

    這篇文章主要介紹了C++字符串拼接效率對比(+=、append、stringstream、sprintf),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言經(jīng)典算法例題求100-999之間的“水仙花數(shù)”

    C語言經(jīng)典算法例題求100-999之間的“水仙花數(shù)”

    本文的主要內(nèi)容,設(shè)計(jì)一個(gè)程序,找出100-999之間的“水仙花數(shù)”,需要的朋友可以參考下
    2015-07-07

最新評論