【问题标题】:How do we use a abstract class as a function return type? [duplicate]我们如何使用抽象类作为函数返回类型? [复制]
【发布时间】:2018-07-05 08:54:29
【问题描述】:

在带有此警告的函数中,将派生类型作为抽象类型返回的 C++ 方法是什么?

假设函数创建了一个派生类型,并希望将该对象作为抽象基类型返回。你如何在 C++ 中做到这一点,而不使用像指针一样的凌乱的 C?

【问题讨论】:

  • 你求助于漂亮的 C++,比如智能指针。
  • 在我开始阅读智能指针之前,请先澄清一点。这是在 C++ 中处理此类问题的唯一方法吗?
  • 如果你想使用抽象类,你必须使用指针。智能指针是最好的选择。
  • @Justin 不,这就是你所做的而不是使用抽象类,但它很差,因为你必须列出所有可能性,然后用条件代码显式处理它们。

标签: c++


【解决方案1】:

您是在询问示例代码吗?希望这会有所帮助...

class Mammal {
public:
    virtual void Speak() const = 0; 
};

class Dog : public Mammal {
public:
    void Speak() const {
        cout << "Woof Woof" << endl;
    }
};

Mammal* getDog() {
    return new Dog();
}

int main() {
    Mammal* m = getDog();
    m->Speak();
    delete m;
    return 0;
}

【讨论】:

  • 我认为这是 OP 想要避免的“杂乱的 C 类指针”的一个例子(并且有充分的理由避免它们)。
  • 阅读 std::shared_ptr 的文档就可以了。感谢您的意见。
猜你喜欢
  • 2021-05-21
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多