C ++ je objektno orijentirani jezik. Apstrakcija podataka, polimorfizam, inkapsulacija i nasljeđivanje temelji su OOP-a. U ovom postu shvatit ćemo što je nasljeđivanje? Vrste nasljeđivanja u C ++-u i svi potrebni koncepti povezani s njim od nule. Na kraju ćemo pogledati i nedostatak ovog moćnog koncepta i pokušati ga riješiti.
- Što je nasljeđivanje u C ++
- Nasljeđivanje pojedinačno
- Nasljeđivanje na više razina
- Hijerarhijsko nasljeđivanje
- Višestruko nasljeđivanje u C ++
- Hibridno nasljeđivanje u C ++
- Dijamantni problem
Što je nasljeđivanje u C ++
Nasljeđivanje je jedan od najsnažnijih i najčešće korištenih koncepata na C ++ ili bilo kojem drugom objektno orijentiranom jeziku. Razumijevanje ovog koncepta zahtijeva malo poznavanja klasa i predmeta. Koristeći nasljeđivanje možemo stvoriti klasu koja se sastoji od općih metoda i atributa. Ovu klasu mogu naslijediti druge klase koje sadrže specifičnije metode.
Na taj način ne moramo iznova pisati iste funkcije, što štedi vrijeme i povećava čitljivost koda.
Sintaksa:
klasa izvedena_klasa: pristupni_tip osnovna_klasa {// tijelo klase}
Osnovna klasa: Klasa koja se sastoji od svih općih metoda i atributa koje druge klase mogu dijeliti radi povećanja čitljivosti koda naziva se osnovna klasa.
Izvedena klasa: Klasa koja se sastoji od specifičnijih metoda i nasljeđuje klasu naziva se izvedena klasa. Izvedena klasa također može biti osnovna klasa za neku drugu izvedenu klasu.
Ako stvorimo klasu XYZ, s nekim atributima i metodama. Sad će student razredne nastave imati neke druge atribute, ali on će također sadržavati elemente XYZ klase, a isto vrijedi i za nastavnički fakultet. Pogledajmo dijagram:
Dakle, razred studenata i fakulteta naslijedit će od XYZ.
Specifikator pristupa- Shvatili smo kako klasa može naslijediti drugu klasu. Ali neki bi ljudi mogli reći da je to nesigurna metoda jer se svi atributi i metode osnovne klase ili roditeljske klase dijele s podređenom klasom ili izvedenom klasom. Primjerice, ako klasu ‘Banka’ nasljeđuju klasa ‘kupci’ i ‘investitori’. Atributi klase „Banka“, kao što je „lozinka trezora“, druge informacije povezane s klijentima i privatni podaci dijele se s klasom „kupci“ i „investitori“, što nije sigurno.
Da bi riješio gornji problem, C ++ koristi specifikatore pristupa za ograničavanje pristupa atributima osnovne klase izvedenoj klasi. U C ++-u postoje ukupno 3 vrste specifikatora pristupa
- Javnost
- Privatni
- Zaštićen
Tablica u nastavku dat će vam dobro razumijevanje kojoj vrsti podataka može pristupiti izvedena klasa prema različitim specifikatorima pristupa.
Specifikator pristupa | Javni podaci | Privatni podaci | Zaštićeni podaci |
Privatni | Nije naslijeđeno | Nije naslijeđeno | Nije naslijeđeno |
Zaštićen | Zaštićen | Privatni | Zaštićen |
Javnost | Javnost | Privatni | Zaštićen |
Nasljeđivanje pojedinačno
Nasljeđivanje pojedinačno može se smatrati običnim vanilijskim oblikom nasljeđivanja. U pojedinačnom nasljeđivanju, pojedinačna klasa nasljeđuje iz osnovne klase.
#include using namespace std class Vlak {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Ovaj slučaj nasljeđivanja naziva se nasljeđivanje na više nivoa. Razred između prve i posljednje klase poznat je i kao srednja osnovna klasa.Što mislite, može li posljednja klasa naslijediti članove prve klase? Da ono može #include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' <Izlaz:
Vrijednost a = 10
Vrijednost b = 20
Vrijednost c = 30
Vrijednost d = 50
Hijerarhijsko nasljeđivanje
Određeni problemi ne mogu se riješiti uz pomoć nasljeđivanja s jednim ili više nivoa. U hijerarhijskom nasljeđivanju, više od 1 klase nasljeđuje iz jedne osnovne klase.
#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }Izlaz:
Nalazimo se na fakultetu
Nalazimo se na fakultetu
Višestruko nasljeđivanje u C ++
U hijerarhijskom nasljeđivanju vidjeli smo da je jedna osnovna klasa imala više izvedenih klasa. U višestrukom nasljeđivanju jedna izvedena klasa ima više od jedne osnovne klase.
#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: javno Jedno, javno Dvoje {public: void Display () {std :: cout<< 'Value of a = ' < U ovom trenutku dobro razumijemo sve vrste nasljeđivanja korištene u C ++. Ali, pričekajte što ako želimo koristiti dvije različite vrste nasljedstva? Je li moguće? Da, moguće je uz pomoć hibridnog nasljeđivanja. U hibridnom nasljeđivanju kombiniramo 2 različite vrste nasljeđivanja. Na primjer- Višerazinsko i višestruko nasljeđivanje, Hijerarhijsko i višestruko nasljeđivanje itd.#include using space names std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class država {zaštićen: int d public: void getinfoCountry (int m) {d = m}} class Australia: javni kontinent, javni Country {public: void Display () {std :: cout<< 'Value of a = ' <Razumijemo gornji dijagram koji će nam pomoći u razumijevanju problema s dijamantima. klasa B i klasa C nasljeđuje iz klase A, stoga klasa A i klasa B imaju atribute i metode klase A. ako klasa D nasljeđuje klasu B kao i klasa C. klasa D imat će sve atribute klase B i klase C Također ima sve atribute klase A naslijeđene od klase B, kao i klase C. stoga, ako napravimo objekt klase D i pozovemo metodu klase A., stvorit će se dvosmislena situacija i kompajler će biti zbunjen odakle to bi trebala biti metoda klase A, iz klase B ili klase D.
Da bismo riješili tu dvosmislenost koristimo koncept nazvan virtualna osnovna klasa. Kada osnovnu klasu napravimo virtualnom baznom klasom, nasljeđuje se samo jedna kopija te klase, bez obzira na broj postojećih staza između virtualne bazne klase i izvedene klase.
struktura podataka o redu čekanja u javirazred A {} razred B: virtualni javni A {} razred C: virtualni javni A {} razred D: javni C, javni D {}Ovime smo došli do kraja ovog članka o nasljeđivanju u C ++. Ako želite saznati više, pogledajte Edureka, pouzdane tvrtke za internetsko učenje. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA osmišljen je kako bi vas osposobio za osnovne i napredne Java koncepte, zajedno s raznim Java okvirima poput Hibernate & Spring.
Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga i javit ćemo vam se što je prije moguće.