菱形繼承
對于菱形繼承簡單的代碼實現:
菱形繼承的對象模型
因為Student類和Teacher類都繼承了Person類。而當Assistant繼承這兩個類時,保留了兩個Person類,這就造成了數據冗余,從而浪費了空間 上面菱形繼承的例子在主函數給_name賦值時,直接s._name = “小紅”; 就會發現錯誤,這是由于菱形繼承的二義性造成的
那么就提出了一個新的東西–虛繼承,來解決在菱形繼承體系里面子類對象包含多份父類對象的數據冗余,浪費空間的問題。 class 派生類名:virtual 繼承方式 基類名
#include <iostream>#include <string>using namespace std;class Person{public: int _age;};class Student :virtual public Person{public: int _num;//學號};class Teacher :virtual public Person{public: int _id;//職工編號};class Assistant :public Student, public Teacher{public: int _major;};int main(){ Assistant s; s._age = 0; s._id = 1; s._major = 2; s._num = 3; `ystem("pause"); return 0;}菱形虛擬繼承的對象模型
虛擬繼承解決了菱形繼承帶來的數據冗余空間浪費的問題,該模型利用對應偏移地址去找成員,避免了二義性。
新聞熱點
疑難解答