假设我有一个名为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
的所有成员复制到当前对象中,对吗?这是危险吗?
答案 0 :(得分:2)
更改Foo构造函数的声明以包含基类的构造函数:
Foo(BaseClass* bc, int x, const char *value): BaseClass(*bc)