微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基础类的对象大小,同时引用派生类

如何解决基础类的对象大小,同时引用派生类

#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函数返回4? 从我的立场出发,指针ob指向派生类d的已创建对象xyz,其大小为20。因此sizeof(*ob)也应返回以下值:20

解决方法

sizeof运算符处理静态类型,而不处理动态类型。 *ob是静态类型abc,所以它就是返回的大小。

请注意,sizeof是在编译时执行的,并且编译器无法找出属于继承层次结构的实例的动态类型。在您的代码段中,看起来这种查找很容易执行,但可以想象

abc *ob;

sizeof(*ob);

在其他翻译单位中xyz都不为人所知的任何地方。

,

这是here的写法:

应用于表达式时,sizeof不会评估该表达式,即使该表达式指定了一个多态对象,结果仍是该表达式的静态类型的大小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。