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

  • 相关阅读:
    动态规划_leetcode70
    动态规划_leetcode64
    动态规划_leetcode63
    PHP处理base64编码字符串
    PHP解决h5页面跨域
    PHP对象转数组
    jQuery 正则
    mysql重置密码
    yii框架学习(获取插入后的id)
    nginx 之 root和alias
  • 原文地址:https://www.cnblogs.com/Key-Ky/p/6941593.html
Copyright © 2011-2022 走看看