#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;
}
我不确定这是否是函数指针的语法,如果它甚至那么主函数是混乱...而且对象声明时正在使用指针..我不熟悉这样的声明所以请解释这个代码如何工作.. ???
答案 0 :(得分:1)
以下定义了一个不带参数的虚函数,并返回指向Shape
的指针:
struct Shape
{
virtual Shape* duplicate() { return new Shape; }
以下覆盖此功能
struct Box : public Shape
{
virtual Box* duplicate() { return new Box; }
请注意返回类型如何更改为Box*
。这是允许的,因为Box
是Shape
的子类。这称为covariant return types。
以下尝试通过Box::duplicate()
指针调用Shape*
:
Shape* s1 = new Box;
Box* b1 = s1->duplicate();
这不会编译,因为Shape::duplicate()
会返回Shape*
而不是Box*
。