История изменений
Исправление alysnix, (текущая версия) :
в ООП, явный каст на предка не нужен. потому что это основа ооп.
потому что, раз все поля предка есть есть в потомке - то указатель типа предок -> на обьект потомок, валиден по умочанию - для этого ооп и задумывалось.
виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.
опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.
простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть, не может это поведение переопределить своим перегруженным методом.
Исправление alysnix, :
в ООП, явный каст на предка не нужен. потому что это основа ооп.
потому что, раз все поля предка есть есть в потомке - то указатель типа предок -> на обьект потомок, валиден по умочанию - для этого ооп и задумывалось.
виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.
опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.
простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть не может это поведение переопределить своим перегруженным методом.
Исходная версия alysnix, :
в ООП, явный каст на предка не нужен. потому что это основа ооп.
потому что, раз все поля предка есть есть в потомке - то указатель типа предок на обьект потомок валиден по умочанию - для этого ооп и задумывалось.
виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.
опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.
простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть не может это поведение переопределить своим перегруженным методом.