Dziedziczenie C++

C Inheritance



Dziedziczenie jest bardzo ważną cechą programowania obiektowego. Pozwala programiście wyprowadzić klasę z istniejącej klasy. Jest to bardzo przydatne zwłaszcza w dużych, złożonych projektach, ponieważ pozwala programiście na ponowne wykorzystanie kodu.

W tym artykule omówimy koncepcję dziedziczenia w programowaniu w C++. Wyjaśnimy koncepcję funkcji friend w C++ na przykładach roboczych.







Dlaczego dziedziczenie?

Dziedziczenie umożliwia tworzenie nowej klasy lub klasy pochodnej z innej klasy lub klasy bazowej. Klasa pochodna lub klasa podrzędna będzie miała wszystkie cechy klasy nadrzędnej lub klasy bazowej. Możemy ponownie wykorzystać kod za pomocą dziedziczenia.



Rodzaj dziedziczenia

Istnieją różne rodzaje dziedziczenia:



  1. Proste/pojedyncze dziedziczenie
  2. Dziedziczenie hierarchiczne
  3. Dziedziczenie wielopoziomowe
  4. Dziedziczenie wielokrotne

W tym artykule rozważymy tylko proste/pojedyncze dziedziczenie.





Przykład 1:

Przyjrzyjmy się teraz przykładowemu programowi, aby zrozumieć koncepcję dziedziczenia w C++. Zdefiniowaliśmy klasę bazową, a następnie wyprowadziliśmy z niej inną klasę. Dlatego klasa pochodna będzie miała cechy (członków i funkcje) z klasy bazowej.

#włączać

przy użyciu standardowej przestrzeni nazw;

class Base_Class
{
publiczny:
inti;
próżniawyświetlacz()
{
koszt<< „Wyświetlanie klasy bazowej” <<i<<koniec;
}

};

klasa Pochodna_Klasa:public Base_Class
{
publiczny:
próżniapokazać()
{
koszt<< „Pokaz klasy pochodnej” <<koniec;
}
};

intGłówny()
{
Pochodna_Klasa DC;
prąd stały.i = 100;
prąd stały.wyświetlacz();
prąd stały.pokazać();

powrót 0;
}



Przykład 2:

To kolejny przykład dziedziczenia w C++. W tym przykładzie zobaczymy, jak konstruktory są wywoływane podczas tworzenia obiektu klasy pochodnej.

Jak widać poniżej, zdefiniowaliśmy dwa konstruktory klas bazowych i trzy konstruktory klas pochodnych. Z poniższych danych wyjściowych można wyraźnie zauważyć, że konstruktor klasy bazowej jest wywoływany jako pierwszy przed wywołaniem konstruktora klasy pochodnej.

#włączać
przy użyciu standardowej przestrzeni nazw;

class Base_Class
{
publiczny:
Base_Class()
{
koszt<< „Base_Class — brak parametrów” <<koniec;
}
Base_Class(intx)
{
koszt<< 'Base_Class — Parametry: ' <<x<<koniec;
}
};

klasa Pochodna_Klasa:public Base_Class
{
publiczny:
Klasy pochodnej()
{
koszt<< „Klasa_pochodna — brak parametrów” <<koniec;
}
Klasy pochodnej(intoraz)
{
koszt<< 'Klasa_pochodna — Parametry: ' <<oraz<<koniec;
}
Klasy pochodnej(intx,intoraz):Base_Class(x)
{
koszt<< 'Parametr klasy pochodnej: ' <<oraz<<koniec;
}
};

intGłówny()
{
Pochodna_Klasa d(7,19);
}

Przykład 3:

W tym przykładzie zobaczymy, jak można wykorzystać obiekty klasy pochodnej.

Jak widać, zdefiniowane są dwie klasy: Rectangle_Class i Cube_Class. Rectangle_Class jest klasą bazową, z której pochodzi klasa pochodna, tj. Cube_Class. Dlatego dziedziczymy cechy z Rectangle_Class do Cube_Class.

Możesz również zauważyć, że dziedziczymy Cube_Class z publiczną kontrolą dostępu. Oznacza to, że klasa pochodna może uzyskać dostęp do wszystkich nieprywatnych członków klasy podstawowej.

Zadeklarowaliśmy obiekt klasy pochodnej, a następnie wywołujemy metody z klasy bazowej, czyli setLength() i setBreadth().

#włączać

przy użyciu standardowej przestrzeni nazw;

class Prostokąt_Klasa
{
prywatny:
intdługość;
intszerokość;
publiczny:
Klasa_prostokąta();
Klasa_prostokąta(intten,intb);
Klasa_prostokąta(Klasa_prostokąta&r);
intpobierzDługość()
{
powrótdługość;
}
intgetBreadth()
{
powrótszerokość;
}
próżniasetDługość(intten);
próżniasetBreadth(intb);
intpowierzchnia();
};

class Cube_Class:public Rectangle_Class
{
prywatny:
intwzrost;
publiczny:
Cube_Class(inth)
{
wzrost=h;
}
intweźWysokość()
{
powrótwzrost;
}
próżniaustawWysokość(inth)
{
wzrost=h;
}
intTom()
{
powrótpobierzDługość()*getBreadth()*wzrost;
}
};


Klasa_prostokąta::Klasa_prostokąta()
{
długość=1;
szerokość=1;
}
Klasa_prostokąta::Klasa_prostokąta(intten,intb)
{
długość=ten;
szerokość=b;
}
Klasa_prostokąta::Klasa_prostokąta(Klasa_prostokąta&r)
{
długość=r.długość;
szerokość=r.szerokość;
}
próżniaKlasa_prostokąta::setDługość(intten)
{
długość=ten;
}
próżniaKlasa_prostokąta::setBreadth(intb)
{
szerokość=b;
}
intKlasa_prostokąta::powierzchnia()
{
powrótdługość*szerokość;
}

intGłówny()
{
Cube_Class c(8);
C.setDługość(12);
C.setBreadth(9);
koszt<<„Głośność to”<<C.Tom()<<koniec;
}

Wniosek:

W tym artykule wyjaśniłem pojęcie dziedziczenia w C++ . C++ obsługuje różne typy dziedziczenia, w tym dziedziczenie wielokrotne (tj. dziedziczenie funkcji z wielu klas bazowych lub klas nadrzędnych). Jednak, żeby to uprościć, rozważyłem tutaj tylko pojedyncze dziedziczenie. Pokazałem trzy działające przykłady, aby wyjaśnić, w jaki sposób możemy użyć dziedziczenia w programowaniu C++ i ponownie użyć kodu. Co więcej, jest to bardzo przydatna funkcja C++.