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代码>哇!