c++ - 基类,继承类sizeof()

标签 c++ class sizeof

为什么在下面的代码中,sizeof(X) == 4sizeof(Y) == 8

另外,在类X中,为什么成员函数不占用内存空间?

class X {
    int i;
public:
    X() { i = 0; }
    void set(int ii) { i = ii; }
    int read() const { return i; }
    int permute() { return i = i * 47; }
};

class Y : public X {
    int i; // Different from X's i
public:
    Y() { i = 0; }
    int change() {
        i = permute(); // Different name call
        return i;
    }
    void set(int ii) {
        i = ii;
        X::set(ii); // Same-name function call
    }
};


    cout << "sizeof(X) = " << sizeof(X) << endl;
    cout << "sizeof(Y) = " << sizeof(Y) << endl;

最佳答案

Y 类的对象有两个整数成员; X 类的对象有一个。您的评论表明 YiXi 不同,因此它看起来像你已经知道答案了。

参见 http://codepad.org/PZsiyFIk例如,类 Y 的对象实际上有两个 i 成员。

此处重复代码:

#include <iostream>
using namespace std;

class X {
  int i;
public:
  X(): i(4) {}
  int getI() {return i;}
};

class Y: public X {
  int i;
public:
  Y(): i(10) {}
  int getMyI() {return i;}
};

int main() {
  Y y;
  cout << y.getI() << ' ' << y.getMyI() << '\n';
}

输出

4 10

main 中只有一个对象叫做y。请注意,y 必须有两个 i 字段才能使输出有意义。

关于c++ - 基类,继承类sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883742/

相关文章:

c - 如何找到数组的大小(从指向第一个元素数组的指针)?

c++ - 模板类类型调整

c++ - 迭代/递归

typescript - 在 Typescript 中使用接口(interface)或类时

java - 打印陷入无限循环的链表

c - 为什么 str[5]、str[] = "1234"和 str = malloc(5) 有不同的大小?

c++ - 在回调中将指针转换为 vector 类型

c++ - 没有分号的程序在 C 中编译得很好,而不是在 C++ 中为什么?

c++ - 如何从 llvm pass 检查 -g 标志(调试信息启用)是否已设置

android - 如何将主要 Activity 和日期选择器分离到自己的类(class)