c ++如何在原始抽象类中创建一个接受派生类输入的函数

Posted

技术标签:

【中文标题】c ++如何在原始抽象类中创建一个接受派生类输入的函数【英文标题】:c++ how to make a function which takes an input of a derived class, within the original abstract class 【发布时间】:2018-10-14 14:16:00 【问题描述】:

假设我有一个名为 Turtle 的抽象类。在课堂上,我在自己的线程上有一个函数,它接受 Turtle 的输入。 编译器说我不能使用抽象类型 Turtle 的输入。 我想要发生的是函数接受派生类的输入,而不是抽象 Turtle 类。我应该如何解决这个问题?

#include <thread>

class Turtle 

    std::thread T_thread;
    public:
    virtual void foo(Turtle T) = 0;

    //tried making this virtual as well
    void do_stuff(Turtle T) 
    
        foo(T);
    

    Turtle() 
    
        T_thread = std::thread(do_stuff, this);
    
;

【问题讨论】:

【参考方案1】:

如果Turtle 是抽象数据类型,那么您不能声明这种类型的变量。但是你可以声明一个变量,它的数据类型是一个指针或者这个类型的引用。

在方法的签名中使用对Turtle的引用:

void do_stuff(Turtle &T)

传递给do_stuff的实际参数的动态类型永远不能是Turtle类型,因为它是抽象的,但它可以是从Turtle派生的类型(如果派生类也不抽象)。

【讨论】:

以上是关于c ++如何在原始抽象类中创建一个接受派生类输入的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中创建一个类的多个实例

指向抽象类的指针

从 C++ 访问在 python 中创建的 C++ 类

如何在iphone中创建一个类实例?

如何在 C++/MFC/GDI 中创建一个非常大的位图

如何在 python 抽象类中创建抽象属性