> -- Rifat писал(а):
> Пока что мне кажется немного странным, чторасширенной записи можно присвоить запись базового типа,а в случае указателей наоборотуказателю базового типа можно присвоить указатель на расширенный тип.
Вообще-то что сделано в С++.
1. Принцип подстановки гласит: на место объекта базового типа типа может быть подставлен объект производного типа.
То есть на примере: параметр функции - часы. На его место в качестве аргумента при вызове может быть поставлен объект производного класса - будильник. Будильник - это часы, но не каждые часы - будильник.
При таком присвоении может быть срезка - о чем все учебники С++ предупреждают. Поэтому рекомендуется передавать параметры по ссылке, а не по значению. При ссылках срезок не бывает.
2. С указателями описанным способом работает виртуальность: указателю на базовый тип может быть присвоен указатель на производный тип. При вызове виртуального метода по указателю вызывается метод по типу присвоенного указателя, а не по объявленному. То есть если указателю на базовый тип присвоен указатель на производный тип, то вызывается виртуальный метод производного класса.