如果我想初始化课程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;
而是将对象初始化为基类对象?
答案 0 :(得分:3)
您拥有该界面的界面和实施。这是继承和多态协同工作的一部分。
仅当Rectangle *r = new Square
来自Square
时, Rectangle
才有效。任何Rectangle
后代的对象都可以分配给Rectangle*
指针。
假设您的所有代码需要一个Rectangle*
指针来完成其工作。代码不需要关心它是否在内存中的Square
对象上运行。也许你必须根据运行时的用户输入或某些业务规则等做出决定。多态性允许这样做。 接口确保所需的Rectangle
功能可用,以及如何使用它。编译器负责相应地委派实现。