|
Конечные классы
Ключевое слово _sealed (конечный) указывает
на то, что класс или структуру нельзя
использовать в качестве базового типа.
Другими словами, в иерархии наследования
этот класс или структура— терминальный тип.
Ключевое слово _sealed (конечный) можно также
применять к отдельному методу класса.
Конечный метод не может быть переопределен
в производных классах. В стандарте C++
подобная возможность не предусмотрена;
однако в Java такая возможность реализована с
помощью ключевого слова final (конечный).
Следующий фрагмент кода является
некорректным, так как конечный класс не
может быть базовым:
_sealed class SomeSealedClass
{
};
class SomeDerivedClass : public SomeSealedClass // ошибка
{
};
Одной из причин использования ключевого
слова _sealed (конечный) является повышение
стабильности работы классов за счет
препятствования слишком самоуверенным и/или
недостаточно квалифицированным
программистам испортить важные и сложные
элементы поведения классов в производных
от них. Другой аргумент использования _sealed (конечный)
— предотвращение попыток изменить
возможности, обеспечивающие безопасность.
Например, предопределенный класс string (Строка)
объявлен как конечный, а вдобавок к тому —
еще и как неизменяемый (он не содержит
общедоступных методов или элементов данных,
что могло бы позволить изменять его
содержимое). Это делает его идеальным для
использования в защитных целях, например,
для хранения паролей. При попытке
скомпилировать следующий код будет выдана
ошибка, так как класс string (Строка) является
конечным:
// не допустимо, потому что Система::Строка - конечный класс
class MyString : public String
// класс MyString: общедоступная Строка
{
};
|