Автор Тема: С++ ООП урок наследяване на класове..  (Прочетена 4633 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Една от основните концепции в обектноориентираният модел на програмиране е наследяването..
Наследяването осъществява разширяване на даден клас, тоест ако имаме даден клас в който има някакъв интерфейс примерно, който е писан от друг програмист, ние можем да разширим възможностите на вече съществуващият клас това става лесно..
Да кажем че имаме примерно даден клас, съвсем принципно самолетчетата в дадена игра, класът самолет описва някой характеристики на самолета, примерно тегло и колко гориво носи.. примерно класа ще изглежда така..

Код: C++
  1. class Plane {
  2.     int fuel_tons;
  3.     int plane_tons;
  4.   };
Естествено съвсем прост клас, м.... да кажем не искаме да пишем наново всички глупости а иска ме просто да добавим нови..
За целта трябва просто да създадем наш клас и да му окажем че искаме да бъде разширен от друг клас..
Код: C++
  1. class myPlane{
  2.  
  3.  
  4. };
  5.  

Но нещо липсва тук, ние никъде не указваме че искаме да разширим даден клас.
Това става след като включим следният синтаксис в дефиницията на нашият клас..
Код: C++
  1. class myPlane : public Plane {
  2.  
  3. };
  4.  

Ключовата дума public  ни гарантира че всички публични методи и свойства (или член функции и член променливи ) ще бъдат наследени от класа Plane в нашият клас MyPlane

Естествено тук има правила за достъп до наследени член функции, които се определят от трите ключови думи
Код: C++
  1. public private protected

В името на упражнението направете някакъв  dummy клас и го наследете от друг....
ще обясня и правилата за достъп но по късно...

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Re: С++ ООП урок наследяване на класове..
« Отговор #1 -: 15 Януари 2012, 09:17:47 »
Както вече казах класовете в С++ могат да се наследяват, вече ще ги наричам базов и производен клас..
При самото наследяване съществуват някой правила за наследяването, едни от тях са правилата за достъп до членове на базовият клас..
Този достъп се нарича капсулация  и се изразява в дефинирането на три ключови думи     
Код: C++
  1. public private protected
така компилатора знае какво искаме да остане скрито и какво да покажем...

Но нека да обясня как действат и трите ключови думи..
Код: C++
  1. public
Ако един базов клас бъде наследен като публик, всички негови публични членове, стават публични и за производният клас, и ще бъдат достъпни от обекта създаден от производният клас..
Но прайвед членовете си остават скрити за производният клас..

Код: C++
  1. private
Ако един базов клас бъде наследен като частен, всички негови публични елементи на базовият клас стават частни на производният клас, тоест те са достъпни само в рамките на класа, но не могат да бъдат извикани от обект чрез оператора за достъп до член "."
Ето още капсулация, понеже данните не могат да се модифицират, от друго място освен от обекти истанции на базовият клас.
А частните елементи на базовия са недостъпни за производния клас...

Може би ще дойде време, когато ще искате да разчупите капсулацията на класовете и ще искате private член на базовият да бъде и  private на производният..
Това става чрез ключовата дума protected "защитен" тоест дава се достъп но членовете са защитени...

Може и да се обърнете и към чичко гугъл наследяване на класове
където има също много уроци и обяснения, по упражнявайте се, създайте един базов клас и три производни и ги наследете чрез трите спецификатора за достъп. Това животно С++ е свързано 80 процента с практически упражнения...


Множествено наследяване...
В С++ класовете могат да бъдат наследявани множествено, тоест един клас може да наследява паралелно още няколко класа....
Просто в декларацията на класа се добавят още класове и става сложен обект който е съставен от много наследени класа..
Код: C++
  1. class myPlane : public Plane : public Pas: public Delo{
  2. };

Виртуалните класове....
Множественото наследяване създава проблеми точно за това и е извадено от повечето С подобни езици..
Но защо създава проблеми, помислете...
Примерно: имаме два класа които разширяват един и същ базов клас, тоест клас1 и клас две са производни на базовият клас, и изведнъж решаваме че трети клас трябва множествено да наследи и клас едно и клас две, добре обаче тук става пълна боза, понеже от клас едно ще имаме всичко от базовият клас, от клас две ще имаме всичко от базовият клас, и като създадем обект от клас3 ще възникне двусмисленост, за да не става това има виртуални класове..
Виртуален клас се зарежда само веднъж, независимо колко пъти бива извикана неговата инстанция..
Но забележете не е статичен клас, тоест различните обекти ще имат различно разположение в програмната памет...

« Последна редакция: 17 Януари 2012, 20:01:49 от onewg »

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re: С++ ООП урок наследяване на класове..
« Отговор #2 -: 17 Януари 2012, 20:05:47 »
Уф, създаваш ми грижи. Първо всеки път ми е много трудно да се сетя паролата си, защото е много сложна. Оня ден я мъдрих час. Добре, че джунглата не е настроена да банва на определен брой грешни опити. Второ сега пък трябва да разбера как се качват картинки. До сега съм слагал видео и текст. Нищо. В името на науката ще се жертвам някак си.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar