Abstrakt klasse i C ++ - Implementering av konstruktør med eksempel

Innholdsfortegnelse:

Anonim

Introduksjon til abstrakt klasse i C ++

En klasse er en datatype definert av brukeren, og den har sine egne datamedlemmer og funksjoner. Medlemmene og funksjonene kan brukes ved å lage et objekt eller en instans av den klassen. Minne tildeles kun for en klasse når et objekt opprettes.

Når vi ønsker å utlede en viss atferd eller karakteristikk fra en klasse til en annen klasse, bruker vi arvebegrepet. Dette er metoden for å arve få egenskaper fra foreldreklasse (baseklasse) til barneklasse (avledet klasse).

Når vi ønsker å definere de samme funksjonene både i basen og avledet klasse, bruker vi nøkkelordet "virtuell" sammen med baseklassefunksjonen når det gjelder implementering og arv. Denne 'virtuelle' funksjonen spesifiserer at den samme funksjonen omdefineres eller overstyres i den avledede klassen.

En abstrakt klasse er en klasse med ren virtuell funksjon. Hva er en ren virtuell funksjon? En ren virtuell funksjon er en virtuell funksjon som ikke har noe organ og er tilordnet 0. Denne typen funksjon implementeres når vi trenger en funksjon, men vi vet foreløpig ikke hva dens funksjon er. Denne funksjonen må implementeres eller defineres i den avledede klassen. Hvis ikke, blir den avledede klassen også en abstrakt klasse.

En ren virtuell funksjon er definert som følger:

virtual void func () = 0;

Eksempel på abstrakt klasse i C ++

Her diskuterer vi Eksempel på abstrakt klasse i C ++ med detaljer:

#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();
)

Produksjon:

Her er Sample_Class grunnklassen og Derived_Class er avledet fra Sample_Class. En ren virtuell funksjon som heter sample_func () er deklarert i baseklassen. Den er tilordnet 0, noe som betyr at den ikke har noen, og at ingenting blir implementert i funksjonen. Dermed har baseklassen blitt en abstrakt klasse da den har en ren virtuell funksjon. Til å begynne med, når Derived_Class er avledet fra baseklassen, blir det også en abstrakt klasse. Men i den avledede klassen defineres klassen sample_func (), som forhindrer at den avledede klassen blir en abstrakt klasse. Når det avledede klasseobjektet opprettes og funksjon kalles, vil vi få utskriften skrevet ut som 'ren virtuell funksjon er implementert'.

En abstrakt klasse kan ikke bli instantivert, noe som betyr at vi ikke kan opprette en instans eller et objekt for en abstrakt klasse. Objektet kan ikke opprettes fordi klassen ikke er implementert fullt ut. Det er faktisk en base for en klasse som implementeres fullt ut senere. Men pekere eller referanser kan lages for en abstrakt klasse. Denne pekeren kan brukes til å kalle de avledede klassefunksjonene. En abstrakt klasse kan ha andre datamedlemmer og funksjoner som ligner på normal klasseimplementering sammen med en ren virtuell funksjon.

Ovennevnte punkt kan forklares gjennom programmet nedenfor

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();
)

Produksjon:

Her vil vi få en feil da et objekt ikke kan opprettes for abstrakt klasse.

I stedet kan andre og tredje linje med kode implementeres, en peker kan opprettes og kan brukes til å kalle avledet klassefunksjon.

Her i funksjonen ovenfor er klasse 1 baseklassen, og ettersom den har en ren virtuell funksjon (func1) har den blitt en abstrakt klasse. Klasse2 er avledet fra foreldreklassen Class1. Func1 er definert i den avledede klassen. Når vi prøver å lage et objekt av typen baseklasse i hovedfunksjon, vil vi få en feil, ettersom objekter ikke kan opprettes for abstrakt klasse. Mens vi prøver å lage en peker av typen baseklasse, vil den bli opprettet med hell, og vi kan peke den til den avledede klassen. Denne pekeren kan brukes til å kalle den avledede klassefunksjonen.

En abstrakt klasse kan ha konstruktører som ligner normal klasseimplementering. Når det gjelder destruktoren, kan vi erklære en ren virtuell destruktør. Det er viktig å ha en ødelegger for å slette minnet som er tildelt klassen. Ren virtuell destructor er en destruktor som er tilordnet 0, men den må defineres av samme klasse, da destruktor vanligvis ikke blir tilsidesatt.

Eksempel på implementering av konstruktør og destruktor for Abstract Class i C ++

Her diskuterer vi Eksempel på abstrakt klasse i C ++ med detaljer:

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;
)

Utgang :

I eksemplet ovenfor er Base-klasse en abstrakt klasse med ren virtuell funksjon func1 (), en konstruktør og en ren virtuell destruktør. Den rene virtuelle funksjonen er definert i den avledede klassen, og forhindrer dermed den avledede klassen fra å bli en abstrakt klasse. Den rene virtuelle destruktoren er definert av Base-klassen utenfor klassen. Hvis vi ønsker å definere medlemsfunksjonen til en klasse utenfor klassen, skal operatøren for omfangsoppløsningen brukes som vist i eksemplet. En peker av typen baseklasse opprettes og peker på den avledede klassen. Når destruktor kalles ved hjelp av 'slett', blir først den avledede klassedestruktoren kalt og deretter baseklasse-destruktoren.

Konklusjon

For å sammenstille alt om en abstrakt klasse kan vi derfor si at den abstrakte klassen er en klasse med en ren virtuell funksjon. Denne rene virtuelle funksjonen må defineres i den avledede klassen, hvis ikke, blir den avledede klassen også en abstrakt klasse. Objektet kan ikke opprettes for abstrakt klasse, men det kan lages peker som kan pekes på den avledede klassen.

Anbefalte artikler

Dette er en guide til Abstract Class i C ++. Her diskuterer vi introduksjonen til abstrakt klasse samt implementering av konstruktør og destruktør i C ++ sammen med dets eksempel. Du kan også se på følgende artikler for å lære mer-

  1. Abstrakt klasse i Python
  2. Abstrakt klasse i Java
  3. Konstruktør og Destructor i C ++
  4. Overstyring i C ++
  5. Overstyrer i Java
  6. Topp 11 funksjoner og fordeler med C ++