C/C++

С++ ООП урок наследяване на класове, втора част

Print
User Rating:  / 3
PoorBest 

 Както вече казах класовете в С++ могат да се наследяват, вече ще ги наричам базов и производен клас..
При самото наследяване съществуват някой правила за наследяването, едни от тях са правилата за достъп до членове на базовият клас..
Този достъп се нарича капсулация и се изразява в дефинирането на три ключови думи
Код: C++

public private protected
така компилатора знае какво искаме да остане скрито и какво да покажем...

Но нека да обясня как действат и трите ключови думи..
Код: C++

public
Ако един базов клас бъде наследен като публик, всички негови публични членове, стават публични и за производният клас, и ще бъдат достъпни от обекта създаден от производният клас..
Но прайвед членовете си остават скрити за производният клас..

Код: C++

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

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

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


Множествено наследяване...
В С++ класовете могат да бъдат наследявани множествено, тоест един клас може да наследява паралелно още няколко класа....
Просто в декларацията на класа се добавят още класове и става сложен обект който е съставен от много наследени класа..
Код: C++

class myPlane : public Plane : public Pas: public Delo{

};

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

 

 

 

 

 

 

 

 

 

 

 

 

 Обсъждане във форума 

Компютърни езици

Операционни с-ми

Офис

База данни

Въпроси - отговори