博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚继承中的内存布局
阅读量:5087 次
发布时间:2019-06-13

本文共 1141 字,大约阅读时间需要 3 分钟。

直接看例子就好:

#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 {          3public:    GraduateTeachingFellow(const Person& p,                           const Student& s, const Teacher& t):    Person(p), Students(s), Teacher(t) {}     4

Note keyword virtual here.

virtual inheritance.

virtual not needed here.

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

 

转载于:https://www.cnblogs.com/Key-Ky/p/6941593.html

你可能感兴趣的文章
oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案...
查看>>
ConsoleWebsocketServer服务端和ConsoleWebsocketClient客户端
查看>>
【读书笔记】iOS-ARC-循环引用-解决办法
查看>>
Py4J -- python和Java互调接口
查看>>
01-redis安装
查看>>
登陆界面实现输错3次锁定
查看>>
Windows Phone开发基础 (5)判断Windows phone 手机是否联网
查看>>
【EntityFramwork--处理数据并发问题】
查看>>
MyBatis学习总结(一)——MyBatis入门学习
查看>>
Hotels杂志
查看>>
Niginx反向代理负载均衡
查看>>
Linux/Unix下的任务管理器-top命令
查看>>
必须掌握的八个【cmd 命令行】
查看>>
BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
查看>>
sql 添加修改说明
查看>>
开发中的乱码问题
查看>>
java实现从报文中获取投保单号
查看>>
面试中的Singleton
查看>>
SPOJ - ADAQUEUE ,双端队列简单运用!
查看>>
网页转图片--- html2canvas截图
查看>>