引用派生 class 时基础 class 的对象大小
Object size of base class while referring to derived class
#include<bits/stdc++.h>
using namespace std;
class abc {
public:
int a = 45;
void sum() {
int s = 55;
cout << s + a << endl;
}
};
class xyz: public abc {
public: int b = 45;
int c = 54;
int d = 96;
int x = 8;
void show() {
cout << "xyz class" << endl;
}
};
int main() {
abc * ob;
xyz d;
ob = & d;
cout << sizeof( * ob) << endl;
}
为什么 sizeof
函数 return 4 在这种情况下?
从我的立场来看,指针 ob
指向派生 class xyz
的已创建对象 d
,其大小为 20。因此 sizeof(*ob)
也应该 return这个值:20.
sizeof
运算符处理静态类型,而不是动态类型。 *ob
是静态类型 abc
,所以这就是它的大小 returns。
请注意,sizeof
是在编译时执行的,编译器无法确定作为继承层次结构一部分的实例的动态类型。在您的代码片段中,看起来这种查找很容易执行,但想象一下
abc *ob;
sizeof(*ob);
其他一些翻译单元中的任何地方,xyz
甚至不知道。
这是写的here:
When applied to an expression, sizeof does not evaluate the expression, and even if the expression designates a polymorphic object, the result is the size of the static type of the expression.
#include<bits/stdc++.h>
using namespace std;
class abc {
public:
int a = 45;
void sum() {
int s = 55;
cout << s + a << endl;
}
};
class xyz: public abc {
public: int b = 45;
int c = 54;
int d = 96;
int x = 8;
void show() {
cout << "xyz class" << endl;
}
};
int main() {
abc * ob;
xyz d;
ob = & d;
cout << sizeof( * ob) << endl;
}
为什么 sizeof
函数 return 4 在这种情况下?
从我的立场来看,指针 ob
指向派生 class xyz
的已创建对象 d
,其大小为 20。因此 sizeof(*ob)
也应该 return这个值:20.
sizeof
运算符处理静态类型,而不是动态类型。 *ob
是静态类型 abc
,所以这就是它的大小 returns。
请注意,sizeof
是在编译时执行的,编译器无法确定作为继承层次结构一部分的实例的动态类型。在您的代码片段中,看起来这种查找很容易执行,但想象一下
abc *ob;
sizeof(*ob);
其他一些翻译单元中的任何地方,xyz
甚至不知道。
这是写的here:
When applied to an expression, sizeof does not evaluate the expression, and even if the expression designates a polymorphic object, the result is the size of the static type of the expression.