class Shape {
public:
virtual void draw() = 0;
. . .
};
class Circle : public Shape {
public:
void draw() { . . . }
. . .
};
class Rectangle : public Shape {
public:
void draw() { . . . }
. . .
};
class Square : public Rectangle {
public:
void draw() { . . . }
. . .
};
Rectangle* rect = new Rectangle;
rect->draw(); // Statically bound to the draw in the Rectangle class
В тексте книги, «понятия языка программирования, 10»,Динамический метод связывания
есть часть о динамическом методе связывания.
Я думаю, что тип объекта, на который указывает прямоугольник, не может быть решен статически, поскольку rect является полиморфным ссылочным типом. rect может также ссылаться на объект типа Sqaure во время выполнения.
последняя черта над кодом неправильная ??
Я исправил его, есть ошибка –
Достаточно умный оптимизатор может доказать, что 'rect' всегда указывает на экземпляр' Rectangle' в этом примере и привязывается к 'Rectangle :: draw' статически. В любом случае наблюдаемый эффект один и тот же, поэтому непонятно, почему вам будет интересно. –