История изменений
Исправление safocl, (текущая версия) :
ну в общем я сделал статик каст и ошибок нет, однако на сколько такое поведение нормально?
в вопросе приведения из указателя на объект наследника в указатель на объект родителя все понятно — там просто не используются новый функционал наследника...
но када наоборот — то получается, куда расширяет компилятор меньший класс в больший? если места рядом нет свободного, все плотно укомплектовани? реаллокация памяти для класса родителя делается или как?
просто впервые вижу такой прием, и не понимаю на сколько он архитектурно верен даже если енто норм поведение?
и чо будет если его сделать еще вдобавок многими другими классами наследниками?
допустим:
базовый класс А;
от него наследуются классы B, C, D, E и т.д. ...
а ведь в qt енто как раз так все и есть...
что получится если создаем указатель на класс родителя.
A * a = new a();
потом создаем из него указатель на наследника B
B * b = static_cast<B *>(a);
а после создаем таким же методом другие объекты класса наследников
C * c = static_cast<C *>(a);
D * d = static_cast<D *>(a);
E * e = static_cast<E *>(a);
и в каждом из них будет какой то новый доп функционал....
получится чо аллокация для объекта класса родителя разрастется?
и чо будет если в классах наследников определены одноименные поля?
Исправление safocl, :
ну в общем я сделал статик каст и ошибок нет, однако на сколько такое поведение нормально?
в вопросе приведения из указателя на объект наследника в указатель на объект родителя все понятно — там просто не используются новый функционал наследника...
но када наоборот — то получается, куда расширяет компилятор меньший класс в больший? если места рядом нет свободного, все плотно укомплектовани? реаллокация памяти для класса родителя делается или как?
просто впервые вижу такой прием, и не понимаю на сколько он архитектурно верен даже если енто норм поведение?
и чо будет если его сделать еще вдобавок многими другими классами наследниками?
допустим:
базовый класс А;
от него наследуются классы B, C, D, E и т.д. ...
а ведь в qt енто как раз так все и есть...
что получится если создаем указатель на класс родителя.
A * a = new a();
потом создаем из него указатель на наследника B
B * b = static_cast<B>(a);
а после создаем таким же методом другие объекты класса наследников
C * c = static_cast<C>(a);
D * d = static_cast<D>(a);
E * e = static_cast<E>(a);
и в каждом из них будет какой то новый доп функционал....
получится чо аллокация для объекта класса родителя разрастется?
и чо будет если в классах наследников определены одноименные поля?
Исходная версия safocl, :
ну в общем я сделал статик каст и ошибок нет, однако на сколько такое поведение нормально?
в вопросе приведения из указателя на объект наследника в указатель на объект родителя все понятно — там просто не используются новый функционал наследника...
но када наоборот — то получается, куда расширяет компилятор меньший класс в больший? если места рядом нет свободного, все плотно укомплектовани? реаллокация памяти для класса родителя делается или как?