C ++理解Functors多态性

时间:2015-05-05 07:53:09

标签: c++ polymorphism functor

我尝试实现多态仿函数对象(纯抽象基类和子对象),仅用于理解目的。我的目标是创建基类的许多对象,这些对象使用纯虚函数的不同实现。

当我创建基类的指针并将其设置为等于新的子类时,我无法将该对象作为函数调用。错误是:

192.0.2.23

以下是代码:

main.cpp:29:7: error: ‘a’ cannot be used as a function

我目前的理解是“foo * a”将函数对象“bar”的地址存储在一个(如cout语句所示)。因此,取消引用它“* a”应该提供对“a”指向的函数的访问,并且“* a()”应该调用它。

但事实并非如此。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:6)

由于你有a的指针,你必须取消引用它以调用()运算符:

(*a)(); // Best use parentheseis around the dereferenced instance

答案 1 :(得分:-1)

在取消引用a时,您放弃了多态性,应该调用foo::operator()而不是bar::operator(),因此会抛出纯虚函数调用异常

>