gpt4 book ai didi

c++ - 返回子类实例的父类(super class)中的方法

转载 作者:行者123 更新时间:2023-11-28 00:11:53 29 4
gpt4 key购买 nike

这个问题相当于 Java 的 How to make Superclass Method returns instance of SubClass

假设这个类层次结构:

class A
{
public:
A makeCopyOfObject();
};
class B: public A
{
public:
void doSomethingB();
};
class C: public A
{
public:
void doSomethingC();
};

我想这样使用它:

B().makeCopyOfObject().doSomethingB();
C().makeCopyOfObject().doSomethingC();

但我当然不能,因为 makeCopyOfObject 函数返回 A 的实例,而不是子类的实例。

我当然可以在两个子类中编写两个版本的函数,但代码将是相同的,除了返回类型,因为要复制和修改的所有字段都在基类中。那么,还有其他选择吗?

最佳答案

我不明白你试图用它实现什么,它可能不是答案(见评论),但你可以做的是一个模板(详细信息 Curiously recurring template pattern )。

template<typename CRTP>
class A {
public:
CRTP& makeCopyOfObject() {
return static_cast<CRTP&>(*this);
}
};

class B: public A<B> {
public:
void doSomethingB();
};

class C: public A<C> {
public:
void doSomethingC();
};

并根据需要使用它:

b.makeCopyOfObject().doSomethingB();
c.makeCopyOfObject().doSomethingC();

查看运行示例 here .


旁注:由于惰性,即使该函数被称为 makeCopyOfObject,它也创建拷贝,但返回对象的引用。要进行复制,您必须实现复制构造函数并返回一个拷贝(搜索克隆模式)。

关于c++ - 返回子类实例的父类(super class)中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609352/

29 4 0
文章推荐: asp.net-mvc - for循环中的Asp.net Div标签
文章推荐: html - 通过 CSS 导入字体问题
文章推荐: javascript - 使用适当的 SRC 隐藏所有图像,包括一些条件
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com