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

C++ 将类的所有成员复制到当前对象,c++,class,visual-c++,copy-constructor,shallow-copy,C++,Class,Visual C++,Copy Constructor,Shallow Copy,假设我有一个名为BaseClass的基类和一个名为Foo的对象,该对象继承自BaseClass。我是否可以将基类实例的所有成员复制到当前正在创建的对象,而不是手动复制 class BaseClass { int a; int b; int c; const char *e; }; class Foo : BaseClass { public: Foo(BaseClass* bc, int x, const char *value) {

假设我有一个名为
BaseClass
的基类和一个名为
Foo
的对象,该对象继承自
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
constructor中的内容:

memcpy(this, &bc, sizeof(*bc));
应该将
bc
的所有成员复制到当前对象中,对吗?这是丹格罗斯吗


顺便说一句,我是以C风格做这件事的。我不怎么做C++。C++-非常欢迎使用这种方法。

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

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

注意对象切片。复制和多态性并不总是很好,因为调用哪个复制构造函数是在编译时确定的。一个常见的解决方案是创建一个虚拟克隆方法,每个派生类根据需要重写该方法以返回正确类型的对象;基类&b1=f1,b2=f2;b1=b2哇!