将类的所有成员复制到当前对象

时间:2015-09-06 03:51:31

标签: c++ class visual-c++ copy-constructor shallow-copy

假设我有一个名为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 ++。 C ++ - 非常欢迎这样做。

1 个答案:

答案 0 :(得分:2)

更改Foo构造函数的声明以包含基类的构造函数:

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