Давайте предположим, что у меня есть базовый класс 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 ++ — способ сделать это очень приветствуется.
Измените ваше объявление конструктора Foo, чтобы включить конструктор для базового класса:
Foo(BaseClass* bc, int x, const char *value): BaseClass(*bc)