zoukankan      html  css  js  c++  java
  • 虚继承中的内存布局

    直接看例子就好:

    #include "qdatetime.h"
    
    class Person {
    public:
        Person(QString name, QDate birthdate)
        QObject(name.ascii()),
        m_Birthdate(birthdate) {}
    
        Person(const Person& p) : QObject(p),
        m_Birthdate(p.m_Birthdate) {}
    
    private:
        QDate m_Birthdate;
    };
    
    class Student : virtual public Person {       1
        // other class members
    };
    
    class Teacher : virtual public Person {       2
        // other class members
    }
    
    
    class GraduateTeachingFellow :
        public Student, public Teacher {          3
    public:
        GraduateTeachingFellow(const Person& p,
                               const Student& s, const Teacher& t):
        Person(p), Students(s), Teacher(t) {}     4
    

    1

    Note keyword virtual here.

    2

    virtual inheritance.

    3

    virtual not needed here.

    4

    It is necessary to initialize all virtual base classes explicitly in multiply-derived classes, to resolve ambiguity about how they should be initialized.

    Each instance of a class that virtually inherits from another has a pointer (or a variable offset) to its virtual base class subobject. 看来这里每个虚继承类的实例代表的是Student和Teacher都会有一个指针指向虚基类的 virtual base class subobject。具体这里怎么翻译还得查查

    GradTeachingFellow - virtual

  • 相关阅读:
    数据结构与算法4—队列
    栈的应用——括号匹配
    迷宫求解
    python的socket编程
    数据结构与算法3—栈
    数据结构与算法2—链表
    数据结构与算法1—线性表
    增量解析
    ElementTree类
    节点序列化
  • 原文地址:https://www.cnblogs.com/Key-Ky/p/6941593.html
Copyright © 2011-2022 走看看