Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何使用抽象类作为函数返回类型? 在这个函数中,派生类型作为抽象类型返回C++的方式是什么?_C++ - Fatal编程技术网

我们如何使用抽象类作为函数返回类型? 在这个函数中,派生类型作为抽象类型返回C++的方式是什么?

我们如何使用抽象类作为函数返回类型? 在这个函数中,派生类型作为抽象类型返回C++的方式是什么?,c++,C++,假设函数创建一个派生类型,并希望将该对象作为抽象基类型返回。如何在C++中使用,而不必像指针那样使用混乱的C?p> 您是否在询问示例代码?希望这有助于 class Mammal { public: virtual void Speak() const = 0; }; class Dog : public Mammal { public: void Speak() const { cout << "Woof Woof" << endl;

假设函数创建一个派生类型,并希望将该对象作为抽象基类型返回。如何在C++中使用,而不必像指针那样使用混乱的C?p> 您是否在询问示例代码?希望这有助于

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;
}
类哺乳动物{
公众:
虚拟void Speak()常量=0;
};
犬类:公共哺乳动物{
公众:
void Speak()常量{

CUT你求助于漂亮的C++智能指针。在我开始阅读智能指针之前,只需要一个澄清点。这是C++中处理此类问题的唯一方法吗?如果你想使用抽象类,你必须使用指针。聪明指针是最好的去路。“贾斯廷,不,你是这样做的,而不是使用抽象的CLASE。s、 但是这很糟糕,因为你必须列出所有的可能性,然后用条件代码显式地处理它们。我认为这是OP想要避免的“混乱的C类指针”的一个例子(有很好的理由避免它们)。阅读std::shared_ptr的文档就可以了。谢谢你的输入。