Скопируйте все члены класса в текущий объект

Давайте предположим, что у меня есть базовый класс BaseClass и объект под названием Foo что унаследовано от BaseClass, Могу ли я скопировать всех членов BaseClass экземпляр для создаваемого текущего объекта вместо того, чтобы делать это вручную?

class BaseClass
{
int a;
int b;
int c;
const char *e;
};

class Foo : BaseClass
{
public:

Foo(BaseClass* bc, int x, const char *value)
{
// copy bc->a to this->a and bc->b to this->b
// and so on with all the members of BaseClass class
this->x = x;
this->s = value;
}

int x;
const char *s;
};

Я могу это сделать?
Другое возможное решение с memcpy(), не уверен, если это некрасиво или не может работать, но при условии, что члены распределены по порядку, с BaseClass во-первых, т. е. этот класс стал чем-то вроде в памяти:

   struct
{
// members of BaseClass
int a;
int b;
int c;
const char *e;
// members of Foo
int x;
const char *s;
};

Как то так в Foo конструктор:

memcpy(this, &bc, sizeof(*bc));

Следует скопировать всех членов bc в текущий объект, верно? это опасно?

Кстати, я делаю это в стиле Си. Я не делаю много C ++. C ++ — способ сделать это очень приветствуется.

1

Решение

Измените ваше объявление конструктора Foo, чтобы включить конструктор для базового класса:

Foo(BaseClass* bc, int x, const char *value): BaseClass(*bc)
2

Другие решения


По вопросам рекламы [email protected]