`
waret
  • 浏览: 132618 次
  • 性别: 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++ 面试题 总结

    不能用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:...

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

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

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

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

    Google C++ 编码规范

    优点:经常用到一个函数带有大量缺省值,偶尔会重写一下这些值,缺省参数为很少涉及的例外情况提供了少定义一些函数的方便。 缺点:大家经常会通过查看现有代码确定如何使用API,缺省参数使得复制粘贴以前的代码...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题8:构造函数能否为虚函数 面试题9:简述子类与父类的析构、构造函数的调用顺序 面试题10:编写类String 的构造函数、析构函数和赋值函数 8.4 拷贝构造函数 面试题11:谈谈对拷贝构造函数和赋值运算符的认识 ...

    语言程序设计课后习题答案

    面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得...

    C#语言规范(4.0版本)

    5.3.3.21 带有嵌入表达式的表达式的一般规则 103 5.3.3.22 调用表达式和对象创建表达式 103 5.3.3.23 简单赋值表达式 103 5.3.3.24 && 表达式 104 5.3.3.25 || 表达式 104 5.3.3.26 ! 表达式 105 5.3.3.27 ?? 表达式...

    微软C#语言规范,C#语言教程中文版

    5.3.3.21 带有嵌入表达式的表达式的一般规则 103 5.3.3.22 调用表达式和对象创建表达式 103 5.3.3.23 简单赋值表达式 103 5.3.3.24 && 表达式 104 5.3.3.25 || 表达式 104 5.3.3.26 ! 表达式 105 5.3.3.27 ?? 表达式...

    C#语言规范4.0

    5.3.3.21 带有嵌入表达式的表达式的一般规则 103 5.3.3.22 调用表达式和对象创建表达式 103 5.3.3.23 简单赋值表达式 103 5.3.3.24 && 表达式 104 5.3.3.25 || 表达式 104 5.3.3.26 ! 表达式 105 5.3.3.27 ?? 表达式...

    C#_语言规范_4.0_中文版

    5.3.3.21 带有嵌入表达式的表达式的一般规则 103 5.3.3.22 调用表达式和对象创建表达式 103 5.3.3.23 简单赋值表达式 103 5.3.3.24 && 表达式 104 5.3.3.25 || 表达式 104 5.3.3.26 ! 表达式 105 5.3.3.27 ?? 表达式...

    C#语言规范(2.0,3.0,4.0合集)

    5.3.3.21 带有嵌入表达式的表达式的一般规则 103 5.3.3.22 调用表达式和对象创建表达式 103 5.3.3.23 简单赋值表达式 103 5.3.3.24 && 表达式 104 5.3.3.25 || 表达式 104 5.3.3.26 ! 表达式 105 5.3.3.27 ?? 表达式...

Global site tag (gtag.js) - Google Analytics