关于c ++中抽象基类的问题

时间:2011-02-21 21:28:40

标签: c++ polymorphism

假设类stringGetter只包含一个纯虚函数:重载的paren- 这些运算符,字符串运算符()(int x)。还假设类getPageString是一个 public stringGetter实现operator()。

以下哪个C ++语句肯定会导致编译错误?

(a) stringGetter * a = new stringGetter;
(b) stringGetter * a = new getPageString;
(c) stringGetter * a;
getPageString * b = new getPageString;
a=b
(d) Exactly two of these will result in a compiler error.
(e) It is possible that none of these will result in a compiler error.

我对抽象基类有点模糊,我无法在网上找到像下面那样进行分配的好例子。我喜欢在这里询问关于这类东西的问题,因为我经常学到更多关于我甚至不打算学习的东西。我甚至无法猜测这些会导致编译器错误。任何人都可以通过a-c告诉我为什么或为什么不会导致编译错误?

4 个答案:

答案 0 :(得分:8)

(a)导致编译器错误,因为无法为抽象类创建实例。

答案 1 :(得分:1)

你不能拥有抽象类的实例,它排除了(a)。选项(c)只是一种比较困难的做法(b)。

答案 2 :(得分:0)

(a) - 抽象类(new stringGetter)的实际实例化只发生在那里。

答案 3 :(得分:0)

看起来像一个技巧问题。 (a)如前所述,肯定会导致编译器错误,并且您已经得到了一个很好的答案。但是,在选项(c)中,“a = b”语句后没有分号。这也会导致编译器错误,因为它是语法错误。请注意,问题没有说“由于类实例化会导致编译器错误中的哪一个?”