最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++中虛基類詳解及其作用介紹

 更新時(shí)間:2021年09月03日 16:37:13   作者:我是小白呀  
這篇文章主要介紹了C/C++中虛基類的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

概述

虛基類 (virtual base class) 是用關(guān)鍵字 virtual 聲明繼承的父類.

在這里插入圖片描述

多重繼承的問題

N 類:

class N {
public:
    int a;
    void display(){
        cout << "A::a=" << a <<endl;
    }
};

A 類:

class A : public N {
public:
    int a1;
};

B 類:

class B : public N {
public:
    int a2;
};

C 類:

class C: public A, public B{
public:
    int a3;
    void display() {cout << "a3=" << a3 << endl;};
};

main:

int main() {
    C c1;
    // 合法訪問
    c1.A::a = 3;
    c1.A::display();

    return 0;
}

輸出結(jié)果:

A::a=3

存在的問題:

  • A::a 和 B::a 是 N 類成員的拷貝
  • A::a 和 B::a 占用不同的空間

在這里插入圖片描述

虛基類

我們希望繼承間接共同基類時(shí)只保留一份成員, 所以虛基類就誕生了. 當(dāng)基類通過多條派生路徑被一個派生類繼承時(shí), 該派生類只繼承該基類一次.

語法:

class 派生類名: virtual 繼承方式 基類名

初始化

通過構(gòu)造函數(shù)的初始化表對虛擬類進(jìn)行初始化. 例如:

N 類:

class N {
public:
    int n;
    N(int n) : n(n) {};
};

A 類:

class A : virtual public N {
public:
    A(int n) : N(n) {};
};

B 類:

class B : virtual public N {
public:
    B(int n) : N(n) {};
};

C 類:

class C: public A, public B{
public:
    C(int n) : N(n), A(n), B(n){};
};

例子

Person 類:

#ifndef PROJECT5_PERSON_H
#define PROJECT5_PERSON_H

#include <iostream>
#include <string>
using namespace std;

class Person {
protected:
    string name;
    char gender;
public:
    Person(string n, char g) : name(n), gender(g) {}
    void display() {
        cout << "name: " << name << endl;
        cout << "gender: " << gender << endl;
    }
};

#endif //PROJECT5_PERSON_H

Student 類:

#ifndef PROJECT5_STUDENT_H
#define PROJECT5_STUDENT_H

#include <string>
#include "Person.h"
using namespace std;

class Student : virtual public Person {
protected:
    double score;
public:
    Student(string n, char g, double s) : Person(n, g), score(s) {};
};

#endif //PROJECT5_STUDENT_H

Teacher 類:

#ifndef PROJECT5_TEACHER_H
#define PROJECT5_TEACHER_H

#include <string>
#include "Person.h"
using namespace std;

class Teacher : virtual public Person {
protected:
    string title;
public:
    Teacher(string n, char g, string t) : Person(n, g), title(t) {};
};

#endif //PROJECT5_TEACHER_H

Graduate 類:

#ifndef PROJECT5_GRADUATE_H
#define PROJECT5_GRADUATE_H

#include "Teacher.h"
#include "Student.h"
#include <string>
using namespace std;

class Graduate : public Teacher, public Student{
private:
    double wage;
public:
    Graduate(string n, char g, double s, string t, double w) : Person(n, g), Student(n, g, s), Teacher(n, g, t), wage(w) {};
    void display() {
        Person::display();
        cout << "score: " << score << endl;
        cout << "title: " << title << endl;
        cout << "wages: " << wage << endl;
    };
};

#endif //PROJECT5_GRADUATE_H

main:

#include <iostream>
#include "Graduate.h"
using namespace std;

int main() {
    Graduate grad1("小白",'f',89.5,"教授",1234.5);
    grad1.display();

    return 0;
}

輸出結(jié)果:

name: 小白
gender: f
score: 89.5
title: 教授
wages: 1234.5

總結(jié)

  • 使用多重繼承時(shí)要十分小心, 否則會進(jìn)場出現(xiàn)二義性問題
  • 不提倡在程序中使用多重繼承
  • 只有在比較簡單和不易出現(xiàn)二義性的情況或?qū)嵲诒匾獣r(shí)才使用多重繼承
  • 能用單一繼承解決的問題就不要使用多重繼承

在這里插入圖片描述

到此這篇關(guān)于C/C++中虛基類詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++虛基類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 超詳細(xì)VScode調(diào)試教程tasks.json和launch.json的設(shè)置

    超詳細(xì)VScode調(diào)試教程tasks.json和launch.json的設(shè)置

    vscode是一個輕量級的文本編輯器,但是它的擴(kuò)展插件可以讓他拓展成功能齊全的IDE,這其中就靠的是tasks.json和launch.json的配置,下面這篇文章主要給大家介紹了關(guān)于超詳細(xì)VScode調(diào)試教程tasks.json和launch.json設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • C/C++?extern關(guān)鍵字用法示例全面解析

    C/C++?extern關(guān)鍵字用法示例全面解析

    這篇文章主要為大家介紹了C/C++?extern關(guān)鍵字用法示例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • c++冒泡排序詳解

    c++冒泡排序詳解

    冒泡排序(Bubble Sort),是一種計(jì)算機(jī)科學(xué)領(lǐng)域的較簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
    2017-05-05
  • C語言實(shí)現(xiàn)打磚塊游戲

    C語言實(shí)現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言單鏈表遍歷與求和示例解讀

    C語言單鏈表遍歷與求和示例解讀

    我們在學(xué)習(xí)編程的過程中,雖然有些語法很簡單,但是我們還是要做多題。不做題是發(fā)現(xiàn)不了問題的,發(fā)現(xiàn)問題我們就可以“對癥下藥”,進(jìn)行查漏補(bǔ)缺了。刷題可以先從簡單題開始刷,熟練之后再做一些可以提升自己能力的題
    2022-07-07
  • 基于C語言實(shí)現(xiàn)的TCP服務(wù)器的流程分析

    基于C語言實(shí)現(xiàn)的TCP服務(wù)器的流程分析

    本文詳細(xì)介紹了如何使用C語言編寫一個簡單的TCP服務(wù)器,包括創(chuàng)建套接字、綁定IP和端口、監(jiān)聽連接請求、接受客戶端連接、數(shù)據(jù)接收與發(fā)送以及關(guān)閉套接字等步驟,最后通過一個簡單的示例展示了TCP服務(wù)器的基本實(shí)現(xiàn)過程
    2024-10-10
  • C語言中如何通過指針參數(shù)返回值

    C語言中如何通過指針參數(shù)返回值

    這篇文章主要介紹了C語言中如何通過指針參數(shù)返回值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 簡單掌握桶排序算法及C++版的代碼實(shí)現(xiàn)

    簡單掌握桶排序算法及C++版的代碼實(shí)現(xiàn)

    桶排序是將要排序的算法按桶分組排序之后再遍歷匯總的一種線性排序算法,下面就讓我們來通過小例子簡單掌握桶排序算法及C++版的代碼實(shí)現(xiàn)^^
    2016-07-07
  • C語言指針應(yīng)用簡單實(shí)例

    C語言指針應(yīng)用簡單實(shí)例

    這篇文章主要介紹了C語言指針應(yīng)用簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • OpenCV 圓與矩形識別的方法

    OpenCV 圓與矩形識別的方法

    這篇文章主要介紹了OpenCV 圓與矩形識別的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論

汉川市| 靖西县| 黄冈市| 遂平县| 宝清县| 庄河市| 荥经县| 彭泽县| 嵩明县| 西和县| 怀宁县| 万安县| 武胜县| 车致| 洪雅县| 巫溪县| 绥棱县| 奉化市| 汕头市| 永顺县| 和龙市| 尼勒克县| 神农架林区| 秦皇岛市| 彰化市| 通州区| 濉溪县| 仁寿县| 湛江市| 怀柔区| 苍山县| 阜平县| 枣庄市| 双峰县| 望都县| 公安县| 萍乡市| 赤水市| 临桂县| 富蕴县| 县级市|