разовании bp в С*? Поскольку и
Автор admin Вторник, 16 июня 2009 11:32
разовании bp в С*? Поскольку исходный объект все-таки относился к типу С, местонахождение подобъекта В известно, поэтому указатель снова переводится на исходный адрес объекта производного класса. Если бы указатель bp изначально ссылался на автономный объект В вместо объекта С, такое преобразование было бы недопустимым1. Более того, в сравнении bp == sp указатель cp неявно преобразуется к В*, поскольку это един- Хотя компилятор бы не обнаружил ошибку. Впрочем, проблема решается при помощи оператора dynamiccast — за подробностями обращайтесь к предыдущей главе. Дублирование подобъектов 453 ственный способ сделать сравнение осмысленным (то есть повышающее преобразование разрешено всегда), отсюда и истинный результат. Таким образом, при преобразовании типов подобъектов и полных типов применяется соответствующее смещение. Естественно, необходимо организовать специальную проверку нулевых указателей, поскольку автоматическое вычитание смещения при преобразовании подобъ-екта В даст неверный результат, если указатель был равен нулю. По этой причине при преобразовании к В* или из него компилятор генерирует код,
Комментарии закрыты.
Последние комментарии