lhgzbxhz 发表于 2020-7-18 15:27:44

说出以下程序的输出结果并说明理由

#include <iostream>
using namespace std;

class A
{
public:
        int data;
        void func() {}
};

class B
{
public:
        int data;
        virtual void func() {}
};

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

        return 0;
}

快而准确地回答答案的将获得10鱼币~

baige 发表于 2020-7-18 15:27:45

vptr指针,指向虚函数表

lhgzbxhz 发表于 2020-7-19 09:50:06

没人要这10鱼币吗?

aelax 发表于 2020-7-19 11:35:29

c++ 不知道

baige 发表于 2020-7-19 12:55:24

跟32和64位编译器、字节对齐有关

xiaosi4081 发表于 2020-7-19 15:32:20

本帖最后由 xiaosi4081 于 2020-7-19 15:50 编辑

#include <iostream>
using namespace std;

class A
{
public:
      int data;
      void func() {}
};

class B
{
public:
      int data;
      virtual void func() {}
};

int main()
{
      cout << sizeof(A) << endl; //输出4,因为一个是int,一个是空函数
      cout << sizeof(B) << endl;//输出12,因为B有虚函数

      return 0;
}

baige 发表于 2020-7-19 15:47:29

xiaosi4081 发表于 2020-7-19 15:32


第一个是4只有一个整形需要分配空间,第二个有一个整形和一个指针,指针在32位是4个字节,在64位是8个字节,8个字节出现字节对齐,4+4+8输出16

baige 发表于 2020-7-19 15:48:50

xiaosi4081 发表于 2020-7-19 15:32


运行的答案不会是你注释的

lhgzbxhz 发表于 2020-7-19 18:09:23

xiaosi4081 发表于 2020-7-19 15:32


请详细说明一下,为什么有虚函数就会多一个指针?
或者说,这个指针是指向什么的?

lhgzbxhz 发表于 2020-7-19 18:10:05

baige 发表于 2020-7-19 12:55
跟32和64位编译器、字节对齐有关

是32位编译器

lhgzbxhz 发表于 2020-7-19 18:10:48

baige 发表于 2020-7-19 15:47
第一个是4只有一个整形需要分配空间,第二个有一个整形和一个指针,指针在32位是4个字节,在64位是8个字 ...

请详细说明一下,这个指针是指向什么的?
页: [1]
查看完整版本: 说出以下程序的输出结果并说明理由