-2
#include <iostream>

struct Shape
{
    virtual Shape* duplicate() { return new Shape; }
    virtual void print() { std::cout << "SHAPE" << std::endl; }
    virtual ~Shape() {}
};

struct Box : public Shape
{
    virtual Box* duplicate() { return new Box; }
    virtual void print() { std::cout << "BOX" << std::endl; }
};

int main(int argc, char** argv) 
{ 
  Shape* s1 = new Box;
  Box* b1 = s1->duplicate();

  b1->print();

  delete s1;
  delete b1;

  return 0; 
}

我不确定这是否是函数指针的语法,即使是这样,主函数也会令人困惑......此外,在对象声明时正在使用指针......我不熟悉这样的声明,所以请解释一下这段代码作品..???

4

1 回答 1

1

以下定义了一个不带参数并返回指向的指针的虚函数Shape

struct Shape
{
    virtual Shape* duplicate() { return new Shape; }

下面覆盖了这个函数

struct Box : public Shape
{
    virtual Box* duplicate() { return new Box; }

请注意返回类型如何更改为Box*. 这是允许的,因为Box它是 的子类Shape。这称为协变返回类型

以下尝试Box::duplicate()通过Shape*指针调用:

  Shape* s1 = new Box;
  Box* b1 = s1->duplicate();

这不会编译,因为Shape::duplicate()返回Shape*而不是Box*.

于 2013-01-06T09:57:16.483 回答