C ++中的方法绑定

时间:2015-07-02 04:26:55

标签: c++

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类型,是否意味着静态方法绑定?

有什么不对吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

绑定明智它似乎是真的。但上面的代码有内存泄漏

Rectangle* r = new Rectangle;
r->draw(); // (1)

r = new Square;
r->draw(); // (2)

这里你将内存分配给r指针两次,但我只能释放一次内存,因为内存泄漏...