欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

概述

虛基類 (virtual base class) 是用關鍵字 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;
}

輸出結果:

A::a=3

存在的問題:

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

在這里插入圖片描述

虛基類

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

語法:

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

初始化

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

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

輸出結果:

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

總結

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

在這里插入圖片描述

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

相關文章

  • C語言實現(xiàn)單鏈表的快速排序算法

    C語言實現(xiàn)單鏈表的快速排序算法

    大家好,本篇文章主要講的是C語言實現(xiàn)單鏈表的快速排序算法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    這篇文章主要介紹了如何利用QT編寫一個圖片瀏覽系統(tǒng),可以支持自動播放,左右拖動切換,點擊列表切換,點擊按鈕切換等功能,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • C語言圖書管理系統(tǒng)簡潔版

    C語言圖書管理系統(tǒng)簡潔版

    這篇文章主要為大家詳細介紹了C語言圖書管理系統(tǒng)簡潔版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復制功能

    C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復制功能

    這篇文章主要給大家介紹了關于C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復制功能的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C語言廣播的使用詳解

    C語言廣播的使用詳解

    顧名思義可以把自己的數(shù)據(jù)發(fā)送給在特定范圍內(nèi)的所有人;我們網(wǎng)絡編程中的廣播一般是通過特定的廣播地址把自己的數(shù)據(jù)發(fā)送給局域網(wǎng)內(nèi)當前在線的客戶端
    2022-05-05
  • C語言中字符串的兩種定義方式詳解

    C語言中字符串的兩種定義方式詳解

    這篇文章主要為大家詳細介紹了C語言中字符串的兩種定義方式,小編覺得這篇文章寫的還不錯,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言實現(xiàn)井字棋詳解

    C語言實現(xiàn)井字棋詳解

    這篇文章主要為大家介紹了C語言如何實現(xiàn)井字棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C++基礎知識總結

    C++基礎知識總結

    本文給大家匯總介紹了C++的一些基礎知識,不管是對新手還是老鳥都有些幫助,希望大家能夠喜歡
    2017-05-05
  • C++按位異或運算符的使用介紹

    C++按位異或運算符的使用介紹

    本篇文章對C++按位異或運算符的使用進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • OpenCV圖像處理之常見的圖像灰度變換

    OpenCV圖像處理之常見的圖像灰度變換

    這篇文章主要介紹了OpenCV圖像處理之常見的圖像灰度變換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論