Introduktion till abstrakt klass i C ++

En klass är en datatyp som definieras av användaren, och den har sina egna datamedlemmar och funktioner. Medlemmarna och funktionerna kan användas genom att skapa ett objekt eller instans av den klassen. Minne tilldelas endast en klass när ett objekt skapas.

När vi vill härleda vissa beteenden eller egenskaper från en klass till en annan klass använder vi begreppet arv. Detta är metoden för att ärva få egenskaper från förälderklass (basklass) till barnklass (härledd klass).

Vid klassimplementering och arv använder vi nyckelordet "virtuell" tillsammans med basklassfunktionen när vi vill definiera samma funktioner både i bas- och härleddklass. Denna "virtuella" funktion specificerar att samma funktion omdefinieras eller åsidosätts i den härledda klassen.

En abstrakt klass är en klass med ren virtuell funktion. Vad är en ren virtuell funktion? En ren virtuell funktion är en virtuell funktion som inte har någon kropp och tilldelas 0. Den här typen av funktion implementeras när vi behöver en funktion men vi vet för närvarande inte vad dess funktion är. Denna funktion måste implementeras eller definieras i den härledda klassen. Om inte, blir den härledda klassen också en abstrakt klass.

En ren virtuell funktion definieras enligt följande:

virtual void func () = 0;

Exempel på abstrakt klass i C ++

Här diskuterar vi Exempel på abstrakt klass 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();
)

Produktion:

Här är Sample_Class basklassen och Derived_Class härrör från Sample_Class. En ren virtuell funktion som heter sample_func () deklareras i basklassen. Den tilldelas 0, vilket innebär att den inte har någon och ingenting implementeras i funktionen. Således har basklassen blivit en abstrakt klass eftersom den har en ren virtuell funktion. Ursprungligen, när Derived_Class härrör från basklassen, blir det också en abstrakt klass. Men i den härledda klassen definieras klassen sample_func (), vilket förhindrar att den härledda klassen blir en abstrakt klass. När det härledda klassobjektet skapas och funktionen kallas kommer vi att skriva ut utskriften som "ren virtuell funktion är implementerad".

En abstrakt klass kan inte instansieras, vilket innebär att vi inte kan skapa en instans eller ett objekt för en abstrakt klass. Objektet kan inte skapas eftersom klassen inte implementeras fullt ut. Det är faktiskt en bas för en klass som implementeras fullt ut senare. Men pekare eller referenser kan skapas för en abstrakt klass. Denna pekare kan användas för att kalla de härledda klassfunktionerna. En abstrakt klass kan ha andra dataledamöter och funktioner som liknar normal klassimplementering tillsammans med en ren virtuell funktion.

Ovanstående punkt kan förklaras genom nedanstående program

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

Produktion:

Här får vi ett fel eftersom ett objekt inte kan skapas för abstrakt klass.

Istället kan andra och tredje rad med kod implementeras, en pekare kan skapas och kan användas för att ringa härledd klassfunktion.

I ovanstående funktion är Class1 basklassen och eftersom den har en ren virtuell funktion (func1) har den blivit en abstrakt klass. Klass2 härleds från moderklassen Class1. Func1 definieras i den härledda klassen. I huvudfunktion, när vi försöker skapa ett objekt av typen basklass, får vi ett fel, eftersom objekt inte kan skapas för abstrakt klass. Medan vi försöker skapa en pekare av basklasstyp skapas den framgångsrikt och vi kan peka den till den härledda klassen. Denna pekare kan användas för att ringa den härledda klassfunktionen.

En abstrakt klass kan ha konstruktörer som liknar normal klassimplementering. När det gäller förstöraren kan vi förklara en ren virtuell förstörare. Det är viktigt att ha en förstörare för att radera minnet som tilldelats klassen. Ren virtuell destruktor är en destruktor som tilldelas 0 men den måste definieras av samma klass, eftersom destruktor vanligtvis inte åsidosätts.

Exempel på implementering av konstruktör och destruktor för Abstract Class i C ++

Här diskuterar vi Exempel på abstrakt klass 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;
)

Utgång :

I ovanstående exempel är basklassen en abstrakt klass med ren virtuell funktion func1 (), en konstruktör och en ren virtuell destruktor. Den rena virtuella funktionen definieras i den härledda klassen och förhindrar därmed den härledda klassen från att bli en abstrakt klass. Den rena virtuella förstöraren definieras av basklassen utanför klassen. Om vi ​​vill definiera medlemsfunktionen för en klass utanför klassen, bör operatören för omfattningsupplösning användas som visas i exemplet. En pekare av basklasstyp skapas och pekas på den härledda klassen. När destruktor kallas med 'radera', kallas först den härledda klassdestruktören och sedan basklassdestruktorn.

Slutsats

För att sammanställa allt om en abstrakt klass kan vi därför säga att den abstrakta klassen är en klass med en ren virtuell funktion. Denna rena virtuella funktion måste definieras i den härledda klassen, om inte, blir den härledda klassen också en abstrakt klass. Objektet kan inte skapas för abstrakt klass, men pekaren kan skapas som kan pekas på den härledda klassen.

Rekommenderade artiklar

Detta är en guide till Abstract Class i C ++. Här diskuterar vi introduktionen till abstrakt klass samt implementeringen av konstruktör och destruktor i C ++ tillsammans med dess exempel. Du kan också titta på följande artiklar för att lära dig mer-

  1. Abstrakt klass i Python
  2. Abstrakt klass i Java
  3. Konstruktör och Destructor i C ++
  4. Övergripande i C ++
  5. Övergripande i Java
  6. Topp 11 funktioner och fördelar med C ++

Kategori: