class Shape {
public:
virtual void draw() = 0;
virtual void area() { . . .}
. . .
};
class Circle : public Shape {
public:
void draw() { . . . }
. . .
};
class Rectangle : public Shape {
public:
void draw() { . . . }
. . .
};
class Square : public Rectangle {
public:
void draw() { . . . }
. . .
};
Rectangle* r = new Rectangle;
r->draw(); // (1)
r = new Square;
r->draw(); // (2)
Shape* sh = new Circle;
sh->area(); // (3)
Square* sq = new Square;
sq->draw(); // (4)
(1),(2)动态绑定,毫无疑问我认为
(3)由于派生自Shape的任何类都不会覆盖方法区域,因此编译器将其解析为Shape :: area()?
(4)没有派生自Sqaure类的类,sq只能引用Square类型,是否意味着静态方法绑定?
有什么不对吗? 提前谢谢。
答案 0 :(得分:0)
绑定明智它似乎是真的。但上面的代码有内存泄漏
Rectangle* r = new Rectangle;
r->draw(); // (1)
r = new Square;
r->draw(); // (2)
这里你将内存分配给r指针两次,但我只能释放一次内存,因为内存泄漏...