Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 51 стр.

UptoLike

Составители: 

51
При вызове деструктора производного класса вызываются деструкторы
всех базовых классов, причем вызов производится в порядке, обратном вызову
конструкторов.
Рассмотрим содержимое функции funcC:
void C::funcC()
{a2=0; //также возможные варианты обращения A::a2=0; B::a2=0; B::A::a2=0; C::a2=0
b2=0; //можно также B::b2=0; C::b2=0; Однако, нельзя A::b2=0
c2=0;// можно также C::c2=0; Однако, нельзя A::c2=0; B::c2=0
funcA(); //можно A::funcA(); B::funcA(); C::funcA()
}
Последний пример иллюстрирует способы обращения к унаследо-
ванным компонентам класса. К ним можно обращаться как к собствен-
ным компонентам класса, а можно использовать так называемое квали-
фицированное имя компонента, которое в общем виде записывается
следующим образом:
имя_класса :: имя_компонента
Использование квалифицированного имени удобно тогда, когда в
базовом и
производном классах определены одноименные компоненты.
Например, если бы в классе А было определено компонентное данное
c2, то в функции funcC() выражение с2=5 изменяло бы значение компо-
нента, определенного непосредственно в классе С, а для того, чтобы из-
менить значение унаследованного от А компонента, необходимо было
бы использовать выражение A::c2=5
или B::c2=5.
Таким образом, можно сделать вывод о том, что, во-первых, имена
компонент, определенных в производном классе могут совпадать с име-
нами унаследованных от базовых классов компонент, а во-вторых, такие
одноименные компоненты существуют независимо друг от друга, могут
быть одновременно доступны в классе с использованием квалифициро-
ванных
имен компонент.
       При вызове деструктора производного класса вызываются деструкторы
всех базовых классов, причем вызов производится в порядке, обратном вызову
конструкторов.
              Рассмотрим содержимое функции funcC:
       void C::funcC()
       {a2=0; //также возможные варианты обращения A::a2=0; B::a2=0; B::A::a2=0; C::a2=0
         b2=0; //можно также B::b2=0; C::b2=0; Однако, нельзя A::b2=0
         c2=0;// можно также C::c2=0; Однако, нельзя A::c2=0; B::c2=0
         funcA(); //можно A::funcA(); B::funcA(); C::funcA()
       }
              Последний пример иллюстрирует способы обращения к унаследо-
         ванным компонентам класса. К ним можно обращаться как к собствен-
         ным компонентам класса, а можно использовать так называемое квали-
         фицированное имя компонента, которое в общем виде записывается
         следующим образом:
              имя_класса :: имя_компонента
              Использование квалифицированного имени удобно тогда, когда в
         базовом и производном классах определены одноименные компоненты.
         Например, если бы в классе А было определено компонентное данное
         c2, то в функции funcC() выражение с2=5 изменяло бы значение компо-
         нента, определенного непосредственно в классе С, а для того, чтобы из-
         менить значение унаследованного от А компонента, необходимо было
         бы использовать выражение A::c2=5 или B::c2=5.
              Таким образом, можно сделать вывод о том, что, во-первых, имена
         компонент, определенных в производном классе могут совпадать с име-
         нами унаследованных от базовых классов компонент, а во-вторых, такие
         одноименные компоненты существуют независимо друг от друга, могут
         быть одновременно доступны в классе с использованием квалифициро-
         ванных имен компонент.




                                           51