void set_dim(double i, double j) {
x = i;
у = j;
}
virtual void show_area() = 0; // чисто виртуальная функция
};
class triangle : public figure {
public:
void show_area() {
cout << "Треугольник с высотой ";
cout << x << " и основанием " << у;
cout << " имеет площадь ";
cout << х * 0.5 * у << ".\n";
}
};
class rectangle : public figure {
public:
void show_area() {
cout << "Прямоугольник с размерами ";
cout << x << "x" << у;
cout << " имеет площадь ";
cout << x * у << ".\n";
}
};
class circle : public figure {
// Отсутствие определения функции show_area()
// вызовет сообщение об ошибке.
};
int main()
{
figure *р; // создаем указатель на базовый тип
triangle t; // создаем объекты производных классов
rectangle r;
circle с; // Ошибка: создание этого объекта невозможно!
р = & t;
p->set_dim(10.0, 5.0);
p->show_area();
р = & r;
p->set_dim(10.0, 5.0);
p->show_area();
return 0;
}
Если класс имеет хотя бы одну чисто виртуальную функцию, его называют
При обсуждении объектно-ориентированных языков обычно используются два термина:
Раннее связывание означает, что вся информация, необходимая для вызова функции, известна при компиляции программы. Примерами раннего связывания могут служить вызовы стандартных функций и вызовы перегруженных функций (обычных и операторных). Из принципиальных достоинств раннего связывания можно назвать эффективность: оно работает быстрее позднего и часто требует меньших затрат памяти. Его основной недостаток — отсутствие гибкости.
Позднее связывание означает, что точное решение о вызове функции будет принято во время выполнения программы. Позднее связывание в C++ достигается за счет использования виртуальных функций и производных типов. Преимущество позднего связывания состоит в том, что оно обеспечивает большую степень гибкости. Его можно применять для поддержки общего интерфейса и разрешать при этом различным объектам, которые используют этот интерфейс, определять их собственные реализации. Более того, позднее связывание может помочь программисту в создании библиотек классов, характеризующихся многократным использованием и возможностью расширяться. Но к его недостаткам можно отнести, хотя и незначительное, но все же понижение скорости выполнения программ.