LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

в ООП, явный каст на предка не нужен. потому что это основа ооп.

потому что, раз все поля предка есть есть в потомке - то указатель типа предок -> на обьект потомок, валиден по умочанию - для этого ооп и задумывалось.

виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.

опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.

простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть, не может это поведение переопределить своим перегруженным методом.

Исправление alysnix, :

в ООП, явный каст на предка не нужен. потому что это основа ооп.

потому что, раз все поля предка есть есть в потомке - то указатель типа предок -> на обьект потомок, валиден по умочанию - для этого ооп и задумывалось.

виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.

опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.

простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть не может это поведение переопределить своим перегруженным методом.

Исходная версия alysnix, :

в ООП, явный каст на предка не нужен. потому что это основа ооп.

потому что, раз все поля предка есть есть в потомке - то указатель типа предок на обьект потомок валиден по умочанию - для этого ооп и задумывалось.

виртуальный метод все равно будет вызываться переопределенный. и это вторая базовая задумка ооп. чтобы вызвать виртуальный метод предка, надо тогда писать имя класса, типа Foo::method.

опять же надо понимать, что виртуальные методы у одного и того же обьекта разные, во время выполнения конструктора и деструктора. при конструировании вызывается тот вирт метод, что определен в данный момент в иерархии, иерархия идет от базы к потомкам. то есть если потомок переопределяет метод, то в конструкторе предка этого еще не видно, и там вызывается тот метод, что видит конструктор. то есть или свой, или своего уже предка. при деструкции - все идет в обратном порядке.

простыми словами, конструктор обьекта всегда выполняется идентично для обьекта данного класса, и никакой потомок, если он есть не может это поведение переопределить своим перегруженным методом.