从父类方法返回子类对象
Returning a subclass object from a parent class method
是否可以在父类方法中返回对象的子类实例?我想做的是,我有一个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;
};
相关文章:
- 从父类方法返回子类对象
- 对静态分配的子类对象进行静态分配的纯虚拟父类引用是否合法?
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 如何在 BaseClass 指针数组中存储指向子类对象的指针?
- 子类对象列表重新解释为基类对象列表?(C++11).
- 如何将字符串(ID)映射到新的子类对象C 的创建
- C++:使用父类运算符函数更新子类对象的继承变量
- 指向子类对象的指针的静态数组出现问题
- cpp 从需要超类对象的函数访问子类对象方法
- 制作可以存储子类对象的超类类型的向量
- 我构造子类对象的方式有什么问题?
- 识别基类指向的子类对象
- C++维护子类对象的混合集合
- 在构造子类对象的过程中,更改一个类属性的数据类型会导致segfault
- 将子类对象传递给采用超类对象的函数
- 从基类模板化列表中实例化子类对象
- 创建子类对象时, 是为超类创建的第二个对象
- 如何从私有成员子类对象捕获异常
- 如何让一组不同的子类对象从另一组共享基类的一个静态变量
- visual超级类有可能拥有子类对象吗?c++