p == cp? ” « boolalpha « (bp =
Автор admin Вторник, 16 июня 2009 11:32
p == cp? ” « boolalpha « (bp == = cp) « endl cp = 0: bp = cp cout « bp « endl; } /* Результат: sizeof(A) == 4 sizeof(B) == 4 sizeof(C) == 12 &c == 1245052 ap == 1245052 bp == 1245056 cp == 1245052 bp == cp? true 0 */ Как видите, подобъект В объекта с находится на расстоянии 4 байт от начала всего объекта. Можно предположить следующую структуру памяти: A’s data B’s data C’s data Объект с начинается с подобъекта А, затем следует подобъект В и, наконец, — данные самого типа С. Поскольку С является частным случаем А и В, объекты этого класса могут быть преобразованы к любому из базовых типов. При повышении до типа А полученный указатель ссылается на подобъект А, начало которого совпадает с началом объекта С, поэтому адрес ар совпадает со значением &с. Но при повышении до типа В полученный указатель должен указывать на фактическое начало подобъекта В, так как класс В ничего не знает о классе С (не говоря уже о классе А). Другими словами, объект, на который ссылается bp, должен быть способен вести себя как автономный объект В (за исключением механизма полиморфного вызова). Что же происходит при обратном преоб
Комментарии закрыты.
Последние комментарии