Здравствуйте, Doom100500, Вы писали:
D>Там кто-то сказал, что в плюсах не проектировалось закрытое наследование. Мне возразили, что то, что я привёл — это приватное. А что такое приватное?
Речь шла о закрытых иерархиях.
Это когда у вас есть несколько конкретных типов (например, ConstantExpression, BinaryExpression, UnaryExpression), и есть некоторый общий тип, к которому они все приводимы.
И у вас есть гарантия того, что если вы видите экземпляр общего типа, он является экземпляром одного из этих типов и ничем больше (поэтому у нас есть возможность выполнять exhaustiveness checking).
В ФП это обычно моделируется алгебраическим типом, когда вы пишете type Expression = ConstantExpression | BinaryExpression | UnaryExpression;.
В ООП довольно сложно изобразить такую штуку, потому что в нём мы обычно вот эту приводимость обеспечиваем при помощи наследования конкретных типов от абстрактного базового.
И вот тут и возникает некоторая проблема — как запретить порождать других наследников от Expression? В каком-нибудь дотнете это достигается package visibility для Expression.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.