有一个班级英雄。有时候,我需要这个类的深层副本(当所有成员被复制值)作为一种一些派生类:是否将“this”向下派生为派生类是正确的?
class Hero
{
public:
// members, w/o getters/setters
public:
// Constructors
Hero();
Hero(...)
~Hero();
inline SuperHero* asSuperHero() {
// Here should be retured SuperHero instance initialized with all members of Hero class
}
};
class SuperHero : public Hero
{
private:
// Shouldn't be instantianed manually
SuperHero();
public:
// This class-only specific method
void helpAround();
};
更明显的方法是实现超级英雄构造这需要所有成员,做他们的副本手动(因为C++中没有派生类的拷贝构造函数):SuperHero(member1,member2,...)(这种)。但是当我更改Hero成员的数量时,我总是会在SuperHero构造函数中更改它们的副本。
为了避免这一点,我将通过以下方式实现asSuperHero():
inline SuperHero* asSuperHero() {
return static_cast<SuperHero *>(this);
}
在这里,我也没有必要对所有成员复制等是这款C方式++正确,设计corrent和C++安全吗?
感谢,
你真的想在这里实现什么?你有一个'SuperHero'存储在一个指向'Hero'的指针并且想要沮丧吗?还是你有一个'Hero'对象,你想用它来创建一个新的'SuperHero'实例? –
@David:第二个 - “有一个你想用来创建一个新的SuperHero实例的英雄对象?” – bjilly