91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C++中的派生機制是什么

發布時間:2023-04-13 17:04:03 來源:億速云 閱讀:121 作者:iii 欄目:開發技術

這篇文章主要介紹“C++中的派生機制是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++中的派生機制是什么”文章能幫助大家解決問題。

一、派生的類型

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

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

示例代碼如下:

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;  //受保護成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

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

示例代碼如下:

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;  //受保護成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

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

示例代碼如下:

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;  //受保護成員可以在派生類中訪問
        // private_var = c;  //私有成員無法在派生類中訪問
    }
};

二、派生的語法

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

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

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

示例代碼如下:

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 類中定義了一個 print() 方法,輸出 Base。Derived 類繼承自 Base 類,并定義了一個同名的 print() 方法,輸出 Derived。在 main 函數中,分別創建了 Base 類和 Derived 類的對象并分別調用了它們的 print() 方法。結果顯示,派生類覆蓋了其基類的同名方法。

三、多重繼承

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

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

其中,Derived 是一個派生類,Base1、Base2 是兩個基類,可以有多個基類。access_specifier 表示該基類在派生類中的訪問權限,可以是 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 成員不能在派生類之外的成員函數中訪問
    }
};

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

    return 0;
}

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

四、虛繼承

當一個類同時從多個基類繼承,而這些基類中又有共同的基類時,就會出現“二義性”的問題。為了解決這個問題,C++引入了虛繼承機制。

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

示例代碼如下:

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;
}

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

五、派生類和基類的關系

派生類和基類之間存在以下關系:

  • 派生類包含的成員都是派生類自己定義的,但它可以訪問基類的公有成員和受保護成員,也可以使用基類中的方法。

  • 派生類的對象中包含了基類的對象,即派生類的對象中包含了基類對象的成員。

  • 派生類的對象可以被看作是基類的對象,即派生類的對象可以直接賦值給基類對象。

示例代碼如下:

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();  //基類中的公有成員和受保護成員可以在派生類對象中訪問
    derived.additionalVar = 3;
    derived.printAdditionalVar();  //派生類中的成員可以直接訪問
    Base& base = derived;  //派生類的對象可以賦值給基類對象
    base.print();  //基類中的成員可以在基類對象中訪問
    return 0;
}

上述代碼中,定義了一個基類 Base 和一個派生類 Derived。在 main 函數中,我們首先創建了一個 Derived 的對象 derived,可以看到它可以訪問由其基類 Base 中繼承的成員變量和方法。同時,我們為 derived 對象中定義了一個 additionalVar 成員,并定義了一個打印 additionalVar 的方法。接著,我們將 derived 對象賦值給了一個 Base 類型的引用 base,并通過 base 訪問了 Base 類中的成員變量和方法。結果顯示了派生類和基類之間的關系。

關于“C++中的派生機制是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

c++
AI

澄城县| 赤水市| 临安市| 伽师县| 肇州县| 德钦县| 阳城县| 万安县| 湛江市| 阿鲁科尔沁旗| 文成县| 阳原县| 玉屏| 瑞昌市| 新乐市| 四川省| 长治县| 奉新县| 桂平市| 金坛市| 三穗县| 玉田县| 扎赉特旗| 济宁市| 囊谦县| 兴化市| 饶河县| 黎川县| 金乡县| 象州县| 巴南区| 海丰县| 武胜县| 泗水县| 莒南县| 涿鹿县| 来宾市| 夏津县| 吉木乃县| 昌都县| 潜山县|