首先,我是初学者,但对编码非常热心。
我有这个基类,从中继承了几个类。函数用基类编写,需要被调用对象的大小。在编写函数时,大小是未知的,因为函数可以由不同派生类的对象调用。 到目前为止,我一直把这个大小作为一个论点,但应该有所改变。
我尝试了sizeof(* this),但sizeof(* this)返回一个完全不同的值,既不是基类的大小,也不是派生类的大小。我很困惑....任何解释?
答案 0 :(得分:3)
您可以编写一个将返回对象大小的虚函数
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;
答案 1 :(得分:0)
只需使用sizeof()运算符和classname即可。你可以找到任何类的大小。
size = sizeof(ClassName);
答案 2 :(得分:0)
好的,我会尝试回答。
根据这个链接: sizeof *this object
sizeof
在编译时计算,因此您的函数将始终使用Base对象的大小(除非您的函数在子类中被覆盖)。
所以最好的解决方案是使用模板。 正如Damon在评论中指出的那样,奇怪的重复出现的模板模式就是这里的解决方案:
template <class ActualClass>
class Base
{
size_t mySize() const { return sizeof(ActualClass); }
}
class Derived : public Base<Derived>
{
};
编辑:这有缺点,你的公共基类实际上是每个派生的不同类。