将基类对象初始化为派生类对象的重点是什么

时间:2017-11-15 21:49:52

标签: class interface polymorphism derived-class base-class

如果我想初始化课程Square

class Square : public Rectangle {
    public Square(int length)
    {
        this->length = length;
        this->width = length;
    }
}

派生自班级Rectangle

class Rectangle {
    protected int length, width;

    public Rectangle(int length, int width)
    {
        this->length = length;
        this->width = width;
    }

    public int getArea() { return length * width; }
}

我会像

那样做
Square * s = new Square(5);
cout << s->getArea() << endl;

这样做有什么好处
Rectangle * r = new Square(5);
cout << r->getArea() << endl;

而是将对象初始化为基类对象?

1 个答案:

答案 0 :(得分:3)

您拥有该界面的界面实施。这是继承多态协同工作的一部分。

仅当Rectangle *r = new Square来自Square时,

Rectangle才有效。任何Rectangle后代的对象都可以分配给Rectangle*指针。

假设您的所有代码需要一个Rectangle*指针来完成其工作。代码不需要关心它是否在内存中的Square对象上运行。也许你必须根据运行时的用户输入或某些业务规则等做出决定。多态性允许这样做。 接口确保所需的Rectangle功能可用,以及如何使用它。编译器负责相应地委派实现