解释这个虚函数指针代码?

时间:2013-01-06 09:26:13

标签: c++ function-pointers

#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; 
}

我不确定这是否是函数指针的语法,如果它甚至那么主函数是混乱...而且对象声明时正在使用指针..我不熟悉这样的声明所以请解释这个代码如何工作.. ???

1 个答案:

答案 0 :(得分:1)

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

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

以下覆盖此功能

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

请注意返回类型如何更改为Box*。这是允许的,因为BoxShape的子类。这称为covariant return types

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

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

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