是否可以在父类方法中返回对象的子类实例?我想做的是,我有一个Member类作为父级,还有一个Voter子类,我希望该成员拥有一种将自身变成投票者对象的方法。
答案 0 :(得分:1)
父类无法知道继承类的其他方法和成员。
子类中的对象可以强制转换为父类,但不能强制转换为父类。
现在取决于您要执行的操作,我猜测应该有一种从父类返回值的方法,该方法可以帮助您从子类中构建对象。
同样,这取决于您要解决的问题。
答案 1 :(得分:1)
我有时会使用类似的东西,通常看起来像这样:
template<typename MemberType>
class Member
{
public:
MemberType *asChild() { return static_cast<MemberType*>(this); }
};
class VoterA : public Member<VoterA> {};
class VoterB : public Member<VoterB> {};
您可以将其设置为任意值,例如覆盖operator*
,以便取消引用Member
即可将其作为给定的模板类型。典型用法,请考虑:
class Elections
{
public:
void vote(VoterA obj);
void vote(VoterB obj);
};
您还可以使元素进行投票:
template<typename MemberType>
class Member
{
public:
Member(Voter *voter) : mVoter(voter) {}
void vote()
{
mVoter->vote(*static_cast<MemberType*>(this));
}
private:
Voter *mVoter = nullptr;
};