您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言和C++中的虛基類的作用是什么”,在日常操作中,相信很多人在C語言和C++中的虛基類的作用是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言和C++中的虛基類的作用是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
概述
多重繼承的問題
虛基類
初始化
例子
虛基類 (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 占用不同的空間
我們希望繼承間接共同基類時只保留一份成員, 所以虛基類就誕生了. 當基類通過多條派生路徑被一個派生類繼承時, 該派生類只繼承該基類一次.
語法:
class 派生類名: virtual 繼承方式 基類名
通過構(gòu)造函數(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; }
輸出結(jié)果:
name: 小白
gender: f
score: 89.5
title: 教授
wages: 1234.5
到此,關(guān)于“C語言和C++中的虛基類的作用是什么”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。