`
waret
  • 浏览: 139412 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

带有虚函数的类的sizeof

阅读更多
#include <iostream>
#include <cstdio>
using namespace std;

class A
{
public:
        char ach[3];
        virtual void test() { };
};

class B : public A
{
public:
        char bch[3];
        virtual void btest() { };
};

class C : public A
{
        char cch[3];
        virtual void ctest() { };
};

class D : public B, public C
{
        char dch[3];
        virtual void dtest() { };
};

int main()
{
        cout << sizeof(A) << endl;      // 8  = 1 * 4(char) + 1 * 4(virtual table)
        cout << sizeof(B) << endl;      // 12 = 2 * 4(char) + 1 * 4(virtual table,基类)
        cout << sizeof(C) << endl;      // 12 = 2 * 4(char) + 1 * 4(virtual table,基类)
        cout << sizeof(D) << endl;      // 28 = 5 * 4(char) + 2 * 4(virtual table,两个基类)

        return 0;
}
 

 

#include <iostream>
#include <cstdio>
using namespace std;

class A
{
public:
        char ach[3];
        virtual void test() { };
};

class B : virtual public A
{
public:
        char bch[3];
        virtual void btest() { };
};

class C : virtual public A
{
        char cch[3];
        virtual void ctest() { };
};

class D : virtual public B, virtual public C
{
        char dch[3];
        virtual void dtest() { };
};

int main()
{
        cout << sizeof(A) << endl;      // 8
        cout << sizeof(B) << endl;      // 16
        cout << sizeof(C) << endl;      // 16
        cout << sizeof(D) << endl;      // 32

        return 0;
}
 

 

 

分享到:
评论

相关推荐

    C++对象模型.pptx

    - 在含有虚函数的类中,每个对象都有一个虚表指针,虚表包含了类中所有虚函数的地址。这样,通过虚函数调用,即使指针类型是基类,也可以调用派生类的相应实现。 7. **赋值函数**: - 通常用于对象之间的值复制,...

    四川大学大二计算机专业C++面向对象程序设计试卷及答案 (3).pdf

    10. 类型转换函数用于实现一个类对象转换到另一个类型,不能带有参数,也不能有返回值。 二、判断正误题 1. 虚函数的声明要求在基类和派生类中保持一致,确保基类指针或引用能够正确地进行多态调用。 2. 抽象类不...

    C++开发工程师面试题库.docx

    * 在大部分 C++ 的实现中,带有虚函数的类的前 4 个字节是虚函数表的入口地址。 结构体和字节对齐 * 在 32 位 Windows 系统或 Linux 系统下,结构体 `A`、`B` 和 `C` 的大小分别是 3、6 和 7 字节。 * C 语法的...

    详解C++编程中的sizeof运算符与typeid运算符

    在使用typeid时,如果想要得到派生类的类型信息(当表达式实际指向派生类的对象时),必须确保表达式指向的是多态类型(即含有虚函数的类),并取消引用指针,否则得到的将是静态类型信息或指针的类型信息。...

    C++笔试选择题100道(有答案)

    如果一个类没有定义任何构造函数,编译器会自动生成一个不带参数的构造函数。 在C++中,一个类只能有一个析构函数。函数参数有默认值时,并不要求该参数之后的所有参数都有默认值,这是错误的理解。解决C++中菱形...

    C++技术整理

    虚函数表是实现多态的关键,它是一个指向虚函数指针的数组,每个对象都有一个虚函数表指针。 **18. 虚函数与重写** 虚函数可以在派生类中被重写,从而实现不同的行为。 **19. 抽象类** 抽象类是包含至少一个纯虚...

    Cpp面经200问.pdf

    重写是指派生类中有与基类中同名同参数列表的虚函数;隐藏是指派生类中的函数与基类的函数名相同但参数列表不同,使基类的函数被隐藏。 #### 36. C++多态实现 C++的多态是通过虚函数实现的,即通过基类指针或引用...

    C++面向对象1

    C++通过虚函数实现多态,虚函数在基类中声明为`virtual`,在派生类中可以重写。纯虚函数(`virtual &lt;函数名&gt;(&lt;参数表&gt;) = 0`)使得基类成为抽象类,不能实例化,但可以被继承。 4. **文件I/O操作**:在C++中,我们...

    北语18春《c++》.docx

    8. 在派生类中定义虚函数时,函数名、参数列表必须与基类中的虚函数一致,只有函数体可以不同,选项D正确。 9. C++是C语言的超集,包含了C的全部语法,但C++是面向对象的,而C语言是面向过程的,选项C错误。 10. ...

    吉大15秋学期计算机可视化编程在线作业二参考答案.pdf

    GroupBox通常用于创建带有标题的框,而Panel更通用,可以用于布局管理,提供背景颜色等功能。 4. **函数调用栈**:函数调用时,栈空间用于保存局部变量、函数参数和返回地址。栈操作包括分配空间、传递参数、保护...

    C++经典面试题库 附带参考答案.docx

    29. 子类覆盖父类的虚函数时,即使不加`virtual`关键字,由于C++的隐式继承规则,仍然可以实现多态。但是,为了代码清晰,通常建议显式添加`virtual`。 以上内容涵盖了C++中的多个关键概念,这些知识对于理解和编写...

    c期末考试题选择题-10页.pdf

    22. **多态性**:C++通过虚函数实现多态性,允许子类重写父类的函数,从而实现动态绑定。 23. **字符串输入输出**:`cin`读取字符串时遇到空格、制表符或换行符会停止,而`cout`输出字符串时会显示整个字符串,直到...

    C++模拟试题_1-2.pdf

    每个类只能有一个析构函数,其名称与类名相同,但前面带有波浪线`~`。析构函数没有参数,且通常在类体外定义。因此,正确答案是A。 4. **数组的定义**:在C++中,数组的正确定义方式是使用方括号`[]`。选项A定义了...

    c++ 面试题 总结

    不能用sizeof()函数 A1: 16位的系统下, int i = 65536; cout ; // 输出0; int i = 65535; cout ; // 输出-1; 32位的系统下, int i = 65536; cout ; // 输出65536; int i = 65535; cout ; // 输出65535; A2:...

    觅职渣记-互联网技术类笔试面试总结

    - **权重**:边可以带有权重。 **2. 图的表示** - **邻接矩阵**:使用二维数组表示图的邻接关系。 - **邻接表**:使用链表表示图的邻接关系。 **3. DFS&BFS** - **深度优先搜索(DFS)**:尽可能深地搜索树的...

    Visual C++ 2005入门经典--源代码及课后练习答案

    CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 ...

    C++期末考试题选择题.pdf

    22. **多态性实现**:多态性是通过虚函数实现的,选项C是正确的。 23. **输入输出操作**:`cin`读取字符串时,遇到空格、制表符或换行符停止,`cout`输出字符串时会输出整个字符串,因此选项D是正确的。 24. **...

    深圳市雁联计算系统有限公司C++程序员面试题

    虚函数用于实现多态性,允许派生类重写基类的成员函数。纯虚函数是一种特殊的虚函数,没有具体的实现,必须在派生类中重写。示例代码如下: ```cpp class Base { public: virtual void func() = 0; // 纯虚函数 };...

    C++基础关键字介绍.docx

    - **float**, **double**, **long double**:浮点数类型,用于表示带有小数点的数值。其中,`double` 的精度高于 `float`,而 `long double` 的精度则更高。 - **signed**, **unsigned**:标识变量是否可以有符号...

Global site tag (gtag.js) - Google Analytics