中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C語言和C++中的虛基類的作用是什么

發布時間:2021-09-03 21:22:34 來源:億速云 閱讀:262 作者:chen 欄目:開發技術

這篇文章主要介紹“C語言和C++中的虛基類的作用是什么”,在日常操作中,相信很多人在C語言和C++中的虛基類的作用是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”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 占用不同的空間

C語言和C++中的虛基類的作用是什么

虛基類

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

語法:

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

初始化

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

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

到此,關于“C語言和C++中的虛基類的作用是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

象州县| 河池市| 靖安县| 德昌县| 吴川市| 沅江市| 南阳市| 辽阳县| 九寨沟县| 阳高县| 盐亭县| 澜沧| 平和县| 松滋市| 富源县| 汉沽区| 井陉县| 广德县| 镇江市| 余江县| 南京市| 灯塔市| 灵丘县| 大安市| 兴宁市| 林口县| 台安县| 榆林市| 临夏县| 黄山市| 民和| 宜川县| 慈利县| 房产| 闽侯县| 稷山县| 宜城市| 瑞丽市| 闸北区| 新密市| 济宁市|