C++ 继承 : How to get Size of called object?

标签 c++ inheritance

首先我是一个初学者,但对编码非常热衷。

我有这个基类,从中继承了几个类。一个函数写在基类中,它需要被调用对象的大小。在函数编码时,大小是未知的,因为函数可能被不同派生类的对象调用。 到目前为止,我一直将大小作为参数传递,但应该有某种方式。

我尝试了 sizeof(*this),但 sizeof(*this) 返回了一个完全不同的值,它既不是基类的大小,也不是派生类的大小。我很困惑……有什么解释吗?

最佳答案

你可以编写一个返回对象大小的虚函数

struct Base
{
    virtual size_t size() const { return sizeof( *this ); }
    virtual ~Base(){}
};

struct Derived1 : Base
{
    virtual size_t size() const { return sizeof( *this ); }
    int x;
};

struct Derived2 : Base
{
    virtual size_t size() const { return sizeof( *this ); }
    int x;
    int y;
};

Base *b  = new Base;
Base *b1 = new Derived1;
Base *b2 = new Derived2;

std::cout << "b->size() = " << b->size() << std::endl;
std::cout << "b1->size() = " << b1->size() << std::endl;
std::cout << "b2->size() = " << b2->size() << std::endl;

关于C++ 继承 : How to get Size of called object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419571/

相关文章:

Javascript - 从原型(prototype)方法内部调用子方法

java - 从 TooTallNate/Java-Websockets 调用 libwebsockets 服务器失败

c++ - 常量对象不在 rdata/rodata 部分

c++ - DirectX10 交换链和设备指向 0x00000000(导致运行时错误)(c++)

c++ - 对象在 = 操作之前超出范围

c++ - 基类作为属性

php - 为什么在这种情况下需要 self::scope

c++ - 如何将客户端内部创建的类的对象传递给服务器?

c++ - cin.clear() 不重置 cin 对象

java - 当使用组合而不是继承时,Comparator<T> 的替代方案是什么?