КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Class Dot : public Coord
Похідний клас точки Class Coord Базовий клас координат Destructor Coord Destructor Dot Constructor Dot Constructor Coord Class Dot: public Coord Class Coord { public: // базовий клас Coord () { cout <<"Constructor Coord \n"; } ~coord () { cout <<"Destructor Coord \n"; } } { public: Dot () { cout <<"Constructor Dot \n";} ~dot (){ cout <<"Destructor Dot \n";} } void main () { Dot A; } Результат роботи: Хоча конструктор базового класу не успадковується, він автоматично викликається при створенні екземпляра похідного класу. Причому спочатку виконується конструктор базового класу, а потім - похідного. Єдина можливість передати аргументи конструкторам базового класу – використати список ініціалізації елементів Деструктор похідного класу виконується раніше деструктора базового класу. Уся робота з організації відповідного виклику покладає на компілятор і програміст не повинен опікуватися про це. { protected: double x, y; // координати public: Coord () { x = 0; y = 0; } Coord (double X, double Y) { x = X; y = Y; } void Print (); void Input (); }; void Coord:: Print () { cout<<"\tx="<<x<<"\ty="<<y<<’\n' } void Coord:: Input ( { cout <<"\tx="; cin>>x; cout <<"\ty="; cin>>y; } Якщо в похідного класу є всього один базовий клас, то говорять про просте наслідування. Наступний приклад ілюструє просте наслідування. #include ”Coord.h” { char name; public: Dot (char Name): Coord (){ name = Name; } Dot (char Name, double X, double Y): Coord (X, Y){ name = Name; } void Input (); void Print (); }; void Dot:: Print () { cout<<”coordinaty point”<<name<<”:”; Coord:: Print (); } void Dot:: Input () { cout<<”vvod coordinat point”<<name<<”:”; Coord:: Input (); }
void main() { Dot C ('C', 3, 4), D ('D'); C.Print (); D.Print (); cout<<"CD="<<C.Dist (D)<<'\n';} Використання конструктора з параметрами Оскільки похідний клас повинен успадкувати всі члени батьківського, при побудові об'єкта свого класу він повинен забезпечити ініціалізацію успадкованих даних-членів. Дані-члени похідного класу можуть використовувати значення даних-членів батьківського класу. Тому ініціалізацію успадкованих даних-членів класу повинна бути виконана до ініціалізації даних-членів похідного класу. Конструктор похідного класу будується з використанням наступного синтаксису: <констр_похідного_класу> (<список_параметрів>): <констр_базового_класу> (<список_аргументів>) { <тіло_конструктора> } Тут використовується список ініціалізації елементів, у якім вказується конструктор базового класу. Частина параметрів, переданих конструкторові похідного класу, звичайно використовується в якості аргументів конструктора базового класу. Потім у тілі конструктора похідного класу виконується ініціалізація даних-членів, що належать цьому класу. Перший конструктор класу Dot має вигляд: Dot (char Name): Coord () { name = Name; } При виклику цього конструктора спочатку викликається конструктор базового класу Coord (), який ініціалізує успадковані дані-члени x і y нулями. Потім у тілі конструктора дане-член name ініціалізується значенням параметра конструктора Name. Другий конструктор класу Dot має вигляд: Dot (char Name, double X, double Y): Coord (X, Y) { name = Name; } При виклику другого конструктора спочатку викликається конструктор базового класу Coord (double X,double Y), який ініціалізує успадковані дані-члени x і y значеннями параметрів конструктора X і Y. Потім у тілі конструктора дане-член name ініціалізується значенням параметра конструктора Name. Перевизначення й виклик членів базового класу У похідному класі звичайно додаються нові члени до членів базового класу. Однак існує також можливість перевизначення (або заміщення) членів базового класу. Звичайно використовується перевизначення функцій-членів базового класу. Щоб перевизначити функцію-член базового класу в похідному класі, досить включити її прототип в оголошення цього класу й потім дати її визначення. Прототипи перевизначеної функції в базовому й похідному класах повинні збігатися. Іноді виникає необхідність викликати функцію-член базового класу, а не її перевизначений варіант, це можна зробити за допомогою операції дозволу області видимості, застосовуваної у формі: <ім'я_класу>:: <ім'я_члена> Це дає можливість компіляторові "бачити" за межами поточної області видимості. Особливо часто це доводиться робити при перевизначенні функцій-членів. Перевизначена функція-член може викликати відповідну функцію-член базового класу, а потім виконувати деяку додаткову роботу (або навпаки). У наведеному вище класі Dot була перевизначена функція Print (). Тіло функції містить оператори, які виводять на екран заголовок “Координати крапки ” і ім'я крапки. Далі викликається функція Print (), яка є членом батьківського класу Coord, за допомогою оператора: Coord:: Print (); Член батьківського класу Coord функція Print () виводить на екран у тому ж рядку координати точки. У результаті на екрані з'явиться, наприклад текст: Координати точки A: x = 4 y = 5
Дата добавления: 2014-01-05; Просмотров: 352; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |