从父类方法返回子类对象

Returning a subclass object from a parent class method

本文关键字:子类 对象 返回 类方法 父类      更新时间:2023-10-16

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

父类无法知道继承类的额外方法和成员。

子类中的对象可以被投射到父类,但不能反过来。

现在,根据您正在尝试做什么,我猜应该有一种从父类返回值的方法,可以帮助您从子类构建对象
同样,这取决于你试图解决的问题。

我有时会使用类似的东西,通常看起来是这样的:

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