2015-09-06 35 views
1

我们假设我有一个名为BaseClass的基类和一个从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构造:

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

应的bc所有成员复制到当前对象,对不对?这是危险吗?

顺便说一句,我正在做一个C风格的。我没有做太多的C++。 C++ - 做这件事的方式非常受欢迎。

+1

注意对象的切片。复制和多态并不总是很好玩,因为调用哪个拷贝构造函数是在编译时确定的。一个常见的解决方案是创建一个虚拟克隆方法,每个派生类根据需要覆盖返回正确类型的对象。 –

回答

2

更改您的富构造函数的声明,包括基类的构造函数:

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

那么容易?谢谢! – Jack

+0

'Foo f1,f2; BaseClass&b1 = f1,b2 = f2; b1 = b2;'哎呀! –

相关问题