1

假设我有一个名为 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);
    }
};
4

1 回答 1

0

如果Turtle是抽象数据类型,则不能声明此类型的变量。但是你可以声明一个变量,其数据类型是一个指针或对该类型的引用。

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

void do_stuff(Turtle &T)

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

于 2018-10-14T14:22:31.773 回答