从父类方法返回子类对象

时间:2018-10-31 12:53:27

标签: c++

是否可以在父类方法中返回对象的子类实例?我想做的是,我有一个Member类作为父级,还有一个Voter子类,我希望该成员拥有一种将自身变成投票者对象的方法。

2 个答案:

答案 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;
};