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 ++如何在原始抽象类中创建一个接受派生类输入的函数的主要内容,如果未能解决你的问题,请参考以下文章