- •Просте та множинне наслідування.
- •Робота конструктора й деструктора
- •Void main ( )
- •Базовий клас координат
- •Похідний клас точки
- •Використання конструктора з параметрами
- •Перевизначення й виклик членів базового класу
- •Void main ( )
- •Віртуальні базові класи
- •Int Getx ( ) { return X ; }
- •Void main ( )
- •Int Getx ( ) { return X ; }
- •Множинне наслідування.
- •Робота конструктора й деструктора
- •Void main ( )
Void main ( )
{
Derived ob ; // створення об'єкта похідного класу
ob.Setx ( 1 ) ;
int z = ob.Getx ( ) ;
}
У цьому випадку клас Derived містить один екземпляр класу Ground, і виклики
ob.Setx ( 1 ) ;
int z = ob.Getx ( ) ;
не приводять до появи повідомлень компілятора про помилки, пов'язані з неоднозначністю. Звідси випливає загальна рекомендація: якщо розробляється ієрархія класів і даний клас успадковується декількома класами, треба перед специфікаторами наслідуваного доступу вказати ключове слово virtual.
У випадку, якщо клас має один або кілька базових класів, їх конструктори викликаються перед викликом конструктора похідного класу. Конструктори базових класів викликаються в тому порядку, у якім вони оголошені в списку спадкування. Оголошення базового класу віртуальним змінює порядок виклику конструкторів при створенні екземпляра похідного класу. Конструктори віртуальних базових класів викликаються першими, раніше конструкторів невіртуальних базових класів. Якщо віртуальних базових класів декілька, їхні конструктори викликаються в порядку їх оголошення в списку спадкування. Потім викликаються конструктори невіртуальних базових класів у порядку їх оголошення в списку спадкування й, нарешті, викликається конструктор похідного класу. Якщо якийсь віртуальний клас є похідним невіртуального базового класу, цей невіртуальний базовий клас конструюється першим (інакше не можна буде викликати конструктор віртуального базового класу).
Якщо ієрархія класів містить кілька екземплярів віртуального базового класу, цей базовий клас конструюється тільки один раз. Якщо все-таки існують як віртуальний, так і невіртуальний екземпляри цього базового класу, конструктор базового класу викликається один раз для всіх віртуальних екземплярів цього базового класу, а потім ще раз для кожного невіртуального екземпляра цього базового класу.
Деструктори викликаються в порядку, у точності зворотному конструкторам.
