为什么在下面的代码中,sizeof(X) == 4
和 sizeof(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
类的对象有一个。您的评论表明 Y
的 i
与 X
的 i
不同,因此它看起来像你已经知道答案了。
参见 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/