C++ 解释这个虚拟函数指针代码? #包括 结构形状 { 虚拟形状*duplicate(){返回新形状;} virtual void print(){std::cout

C++ 解释这个虚拟函数指针代码? #包括 结构形状 { 虚拟形状*duplicate(){返回新形状;} virtual void print(){std::cout,c++,function-pointers,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 Sha

下面定义了一个不带参数并返回指向
形状的指针的虚拟函数:

#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; 
}
以下命令重写此函数

struct Shape
{
    virtual Shape* duplicate() { return new Shape; }
请注意返回类型如何更改为
Box*
。这是允许的,因为
Box
Shape
的子类。这称为

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

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

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

我看不到任何函数指针。如果它是
虚拟的
让你困惑,请阅读一本书的相应章节或找到一篇关于这一问题的好文章。旁注:通常,以后进先出顺序创建和销毁对象,而不是以先进先出顺序创建和销毁对象,或者使用智能poi自动创建和销毁对象如果没有函数指针,shape*duplicate()的意思是什么@chris@MragankYadav,应用,
duplicate
是一个返回指向
形状的指针的函数。如果需要指向返回
形状的函数的指针,则它是
形状(*duplicate)()
,它可以再次成功地将螺旋规则应用于它以进行读取。
  Shape* s1 = new Box;
  Box* b1 = s1->duplicate();