C ++, как сделать функцию, которая принимает входные данные производного класса, в исходном абстрактном классе - PullRequest
0 голосов
/ 14 октября 2018

Допустим, у меня есть абстрактный класс 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 Ответ

0 голосов
/ 14 октября 2018

Если Turtle является абстрактным типом данных, то вы не можете объявить переменную этого типа.Но вы можете объявить переменную, тип данных которой является указателем или ссылкой на этот тип.

Используйте ссылку на Turtle в сигнатуре метода:

void do_stuff(Turtle &T)

Динамический типфактического параметра, который передается в do_stuff, никогда не может иметь тип Turtle, потому что он является абстрактным, но может иметь тип, производный от Turtle (если производный класс также не является абстрактным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...