Uvod u apstraktni razred u C ++

Klasa je vrsta podataka koju definira korisnik i ima svoje članove i funkcije podataka. Članovi i funkcije mogu se koristiti za stvaranje predmeta ili instancije te klase. Memorija se za klasu dodjeljuje samo kad se stvori objekt.

Kada želimo izvesti neke vrste ponašanja ili karakteristika iz jedne klase u drugu klasu, koristimo koncept nasljeđivanja. Ovo je metoda nasljeđivanja nekoliko svojstava od roditeljske klase (osnovne klase) do podređene klase (izvedena klasa).

U implementaciji i nasljeđivanju klase, kada želimo definirati iste funkcije i u osnovnoj i u izvedenoj klasi, koristimo ključnu riječ "virtualno", zajedno s funkcijom osnovne klase. Ova "virtualna" funkcija određuje da je ista funkcija redefinirana ili poništena u izvedenoj klasi.

Apstraktna klasa je klasa s čistom virtualnom funkcijom. Dakle, što je čista virtualna funkcija? Čista virtualna funkcija je virtualna funkcija koja nema tijelo i koja joj je dodijeljena kao 0. Ova vrsta funkcije se implementira kad trebamo funkciju, ali trenutno ne znamo koja je njena funkcija. Ovu funkciju treba implementirati ili definirati u izvedenoj klasi. Ako ne, tada izvedena klasa postaje i apstraktna klasa.

Čista virtualna funkcija definirana je na sljedeći način:

virtual void func () = 0;

Primjer apstraktne klase u C ++

Ovdje ćemo raspravljati o primjeru apstraktne nastave u C ++ s detaljima:

#include
using namespace std;
class Sample_Class (
int a = 5;
public:
virtual void sample_func() = 0;
void print_func() (
cout << a;
)
);
class Derived_Class : public Sample_Class (
public:
void sample_func() (
cout << "pure virtual function is implemented";
)
);
int main() (
Derived_Class d_object;
d_object.sample_func();
)

Izlaz:

Ovdje je Sample_Class osnovna klasa, a Derived_Class je izveden iz Sample_Class. Čista virtualna funkcija zvana sample_func () deklarirana je u osnovnoj klasi. Dodijeljena je 0, što znači da nema nikoga i da se ništa ne provodi unutar funkcije. Dakle, osnovna klasa postala je apstraktna klasa jer ima čistu virtualnu funkciju. U početku, kada je izvedeni_Class izveden iz osnovne klase, on također postaje apstraktna klasa. Ali u izvedenoj klasi definira se klasa sample_func (), što sprečava da izvedena klasa postane apstraktna klasa. Kada se stvori objekt izvedene klase i nazove se funkcija, dobit ćemo ispis ispisan kao 'realizirana je čista virtualna funkcija'.

Apstraktna klasa ne može biti instancirana, što znači da ne možemo stvoriti instancu ili objekt za apstraktnu klasu. Objekt se ne može stvoriti jer klasa nije implementirana u potpunosti. To je zapravo baza za klasu koja će se kasnije u potpunosti implementirati. No, pokazivači ili reference mogu se stvoriti za apstraktnu klasu. Ovaj se pokazivač može koristiti za pozivanje izvedenih funkcija klase. Apstraktna klasa može imati druge članove podataka i funkcije slične uobičajenoj implementaciji klase, zajedno s čistom virtualnom funkcijom.

Gornja tačka može se objasniti kroz program u nastavku

class Class1 (
int a;
public:
virtual void func1() = 0;
void func2() (
cout << "base class";
)
);
class Class2 : public Class1 (
public:
void func1() (
cout << "func1 in derived class";
)
);
int main() (
Class1 b; //---------- > this line will cause an error
//Class1 *b = new Class2(); //---------- > pointer can be created, so this line is correct
// b -> func1();
)

Izlaz:

Ovdje ćemo dobiti grešku jer objekt ne može biti stvoren za apstraktnu klasu.

Umjesto toga, mogu se implementirati 2. i 3. reda koda, može se stvoriti pokazivač i može se koristiti za pozivanje izvedene funkcije klase.

Ovdje je u gornjoj funkciji Class1 osnovna klasa, a kako ima čistu virtualnu funkciju (func1), to je postala apstraktna klasa. Class2 je izveden iz nadređene klase Class1. Func1 je definirana u izvedenoj klasi. U glavnoj funkciji, kada pokušavamo stvoriti objekt tipa osnovne klase, doći će do pogreške, jer se objekti ne mogu stvoriti za apstraktnu klasu. Dok kada pokušamo stvoriti pokazivač tipa osnovne klase, on će se uspješno kreirati i možemo ga usmjeriti na izvedenu klasu. Ovaj se pokazivač može koristiti za pozivanje izvedene funkcije klase.

Apstraktna klasa može imati konstruktor sličan uobičajenoj implementaciji klase. U slučaju destruktora možemo proglasiti čistim virtualnim destruktorom. Za brisanje memorije dodijeljene za klasu važno je imati destruktor. Čisti virtualni destruktor je destruktor koji je dodijeljen 0, ali mora ga definirati ista klasa, jer destruktor obično nije nadjačan.

Primjer implementacije konstruktora i destruktora za apstraktni razred u C ++

Ovdje ćemo raspravljati o primjeru apstraktne nastave u C ++ s detaljima:

class Base (
public:
int a;
virtual void func1() = 0;
// Constructor
Base(int i) (
a = i;
)
// Pure Virtual destructor
virtual ~Base() = 0;
);
// Pure virtual destructor is defined
Base :: ~Base() (
cout << "Pure virtual destructor is defined here" << endl;
)
class Derived : public Base (
int b;
public:
// Constructor of derived class
Derived(int x, int y) : Base(y) ( b = x; )
// Destructor of derived class
~Derived() (
cout << "Derived class destructor" << endl;
)
//Definition for pure virtual function
void func1() (
cout << "The value of a is " << a << " and b is " << b << endl;
)
);
int main() (
Base *b = new Derived(5, 10);
b->func1();
delete b;
)

Izlaz :

Ovdje, u gornjem primjeru, osnovna klasa je apstraktna klasa s čistom virtualnom funkcijom func1 (), konstruktorom i čistim virtualnim destruktorom. Čista virtualna funkcija definirana je u izvedenoj klasi čime se sprječava da izvedena klasa postane apstraktna klasa. Čisti virtualni destruktor definira klasa Base izvan klase. Ako želimo definirati funkciju člana klase izvan klase, treba koristiti operatora razlučivosti opsega kao što je prikazano u primjeru. Stvara se pokazivač vrste osnovne klase i upućuje na izvedenu klasu. Kada se destruktor zove pomoću 'delete', prvo se poziva destruktor izvedene klase, a zatim se zove destruktor osnovne klase.

Zaključak

Dakle, za sastavljanje svega o apstraktnoj klasi možemo reći da je apstraktna klasa klasa s čistom virtualnom funkcijom. Ova čista virtualna funkcija mora biti definirana u izvedenoj klasi, ako ne, tada izvedena klasa također postaje apstraktna klasa. Objekt se ne može stvoriti za apstraktnu klasu, ali može se stvoriti pokazivač koji se može ukazati na izvedenu klasu.

Preporučeni članci

Ovo je vodič za Sažetak klase na C ++. Ovdje raspravljamo o uvodu u apstraktnu klasu, kao i o implementaciji konstruktora i destruktora u C ++ zajedno s njegovim primjerom. Možete pogledati i sljedeće članke da biste saznali više -

  1. Sažetak klase u Pythonu
  2. Sažetak klase na Javi
  3. Konstruktor i destruktor u C ++
  4. Poništavanje u C ++
  5. Prevladavanje u Javi
  6. Top 11 značajki i prednosti C ++

Kategorija: