`

虚继承类长度

    博客分类:
  • c++
阅读更多
#include<iostream>
using namespace std;

class A{
    char k[3];//2.由于内存对齐,故它的长度也是4
public:
    virtual void aa(){}//1.它有一个虚指针,长度是4
};

//由于是虚继承要加上A的长度:8+8=16
class B:virtual public A{
    char j[3];
public:
    virtual void bb(){}
};

//非虚继承,只需加上普通指针的长度:8+4
class C:public A{
    char k[3];
public:
    virtual void cc(){}
};

//由于是虚继承加上B的长度:16+8=24
class D:virtual public B{
    char h[3];
public:
    virtual void dd(){}
};

int main()
{
    cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
    cout << sizeof(C) << endl;
    cout << sizeof(D) << endl;
}

8
16
12
24
分享到:
评论

相关推荐

    字符串比较、求串的长度、判断串是

    这意味着可以通过继承`CMyString`类来创建一个新类,例如`CColoredString`,并添加颜色属性等额外功能。通过使用虚函数可以进一步支持多态性。 ### 示例代码解析 在`main`函数中展示了如何使用`CMyString`类: - ...

    c++派生类与继承实验报告.pdf

    如果一个派生类同时继承了两个或多个具有共同基类的类,不使用虚基类可能导致二义性,即基类的同一成员可能有两个不同的实例。通过在基类前加上`virtual`关键字,可以确保只有一个基类的实例,从而避免二义性。 ...

    vc6重绘的一个combo,可以显示超过combo长度的文本

    1. **派生一个新的ComboBox类**:创建一个自定义的ComboBox类,该类继承自MFC的CComboBox类,这样我们可以访问并修改其内部行为。 2. **重写OnDrawItem**:CComboBox类中有一个虚函数OnDrawItem,它是用来绘制...

    class_shape.zip_class Shape_shape类继承

    在这个"class_shape.zip"压缩包中,我们看到的是一个关于"Shape"形状类的设计,它涉及到了多重继承和虚函数的概念,这些都是面向对象编程中的重要特性。 首先,让我们来讨论"Shape"类。在C++中,Shape类通常被设计...

    深入剖析C#继承机制

    5. 多态性:派生类可以定义虚方法、虚属性和虚索引器,以便在运行时通过基类引用调用派生类的实现。 6. 接口实现:通过接口,类可以实现多重继承的效果,即一个类可以实现多个接口,获得多个接口定义的方法和属性。 ...

    C++实验程序继承输入输出

    在C++编程中,继承是面向对象编程的一个关键特性,它允许我们创建一个新类(子类或派生类)来扩展或修改已存在的类(基类或父类)。在这个"**C++实验程序继承输入输出**"的主题中,我们将探讨如何在C++中实现继承,...

    易语言 彗星虚表操作

    每个类的虚表长度和内容可能不同,取决于类及其继承层次中的虚方法数量。 2. **虚方法调用**:在易语言中,我们可以通过`.发送消息`或`.调用方法`等指令来调用对象的虚方法。这些指令会根据对象的虚表来确定实际...

    利用虚函数计算各种图形面积

    每个派生类都继承自`Shape`,并覆盖`getArea()`虚函数,实现各自特有的面积计算方法。例如,`Triangle`类会实现一个计算三角形面积的`getArea()`,`Square`类则会计算正方形面积,以此类推。 三角形的面积通常由底...

    定义一个矩形类可算体积

    5. **多态性**:通过继承和虚函数,可以创建`box`类的派生类,如立方体或长方体,实现多态性,使得不同形状的体积计算可以在统一的接口下进行。 通过深入理解类的定义和使用,以及不断优化和扩展类的功能,我们可以...

    点、线、圆、矩形、抛物线的类定义

    线类可能包含斜率、截距等属性,以及计算长度、是否平行或垂直等成员函数。 - **圆类(Circle)**:包含一个点对象(圆心)和半径,可以定义构造函数`Circle(Point center, int radius)`。圆类可以提供计算面积、...

    使用CAsyncSocket类实现异步网络通信

    - 在类中声明一些成员变量,如是否连接状态`m_bConnected`、接收数据长度`m_nRecvLength`、发送数据长度`m_nSendLength`以及发送和接收缓冲区。 - 重载网络事件处理函数,如`OnConnect()`、`OnReceive()`和`OnSend...

    C++空类及没有成员变量的类的大小实例分析

    接下来,我们讨论含有虚函数的类,如类`c`。类`c`继承自类`a`并包含一个纯虚函数`fun()`。在C++中,具有虚函数的类会有一个虚函数表(vtable)指针,用于实现多态性。在32位系统中,指针通常占用4个字节。因此,尽管...

    C++课程设计组合派生构成新的类

    派生是一种“is-a”关系,一个类可以从已有的类(基类)继承属性和行为。这使得我们可以创建一个新的类,它拥有基类的所有功能,并能添加或修改自己的特性。在本课程设计中,`Line类`可能是从`Point类`派生出来的,...

    Object arx 类天正墙体 的 自定义实体

    这个类应该包含墙体的基本属性,如长度、宽度、高度等,并重写必要的虚函数,如dwgInFields()和dwgOutFields()以支持数据的读写。 2. 实现绘图:重写draw()函数,根据墙体的属性在AutoCAD图形空间中绘制墙体。 3. ...

    西安交大C++程序设计第九章作业.pdf

    但是,多继承可能导致“菱形问题”(Diamond Problem),在特定情况下需要使用虚继承(virtual inheritance)来解决。 8. **实验目的**: - 通过这个实验,目的是让学生熟悉类的继承,掌握如何定义和使用派生类,...

    c++中虚函数的使用

    当一个类继承了另一个类时,它可以覆盖基类的虚函数来提供自己的实现。这样,在运行时,系统可以根据对象的实际类型调用正确的函数版本。 #### 示例代码解析 在给出的示例代码中,作者通过定义一个基类`shape`并...

    shape类c实验实验报告

    例如,`Circle`类可能有半径属性,而`Rectangle`类则有长度和宽度属性。继承允许代码重用,减少了冗余,并提高了代码的可扩展性。 3. **多态性**: 多态性是OOP的一个关键特性,允许不同类型的对象对同一消息做出...

    第8章类和对象.doc

    虽然这个例子没有展示继承,但可以理解`Rectangle`类可以被另一个类(比如`Square`)继承,以便共享相同的属性和行为。 4. 多态性:多态性允许不同的对象对同一消息做出不同的响应。在C++中,多态性可以通过虚函数...

    9秒学院C++模版类实现单链表

    这意味着`linkList`继承了`list`的所有虚函数,并且需要提供它们的实现。`linkList`类定义了单链表的节点结构(`node`),包含数据和指向下一个节点的指针。`linkList`类还包含了链表的头节点`head`、尾节点`tail`...

    c++练习题(带答案) (2).docx

    `Derived`类继承自`Base2`和`Base1`,这两个基类都虚继承自`Base`。因为虚继承,只会有一个`Base`子对象,因此在构造和析构过程中,只会有一次输出,所以输出结果是12,不包括`Base`类的析构。 以上内容详细介绍了...

Global site tag (gtag.js) - Google Analytics