Бьерн Страуструп.
Язык программирования С++
42
Если статического контроля типов нет, приведенная выше ошибка обнаружится только при выполнении
программы:
// пример динамическое контроля типа
// вместо статического; это не С++
Stack s;
// стек может хранить указатели на объекты
// произвольного типа
void f ()
{
s.push ( new Saab900 );
s.push ( new Saab37B );
s.pop () -> takeoff ();
//
прекрасно: Saab 37B
- самолет
cs.pop () -> takeoff ();
//
динамическая ошибка:
// машина не может взлететь
}
Для способа определения, допустима ли операция над объектом,
обычно требуется больше
дополнительных расходов, чем для механизма вызова виртуальных функций в С++.
Рассчитывая на статический контроль типов и вызов виртуальных функций, мы приходим к иному стилю
программирования, чем надеясь только на динамический контроль типов. Класс в С++ задает строго
определенный интерфейс для множества объектов этого и любого производного класса,
тогда как в
Smalltalk класс задает только минимально необходимое число операций, и пользователь вправе
применять незаданные в
классе операции.
Иными словами, класс в С++ содержит точное описание
операций, и пользователю гарантируется, что только эти операции транслятор сочтет допустимыми.
Достарыңызбен бөлісу: