Sissejuhatus abstraktklassi C ++

Klass on kasutaja määratletud andmetüüp ja sellel on oma andmeside liikmed ja funktsioonid. Liikmeid ja funktsioone saab kasutada selle klassi objekti või eksemplari loomisega. Mälu eraldatakse klassile ainult objekti loomise ajal.

Kui soovime tuletada klassidest mõnda käitumisviisi või omadusi ühest klassist teise, kasutame pärimise mõistet. See on meetod, mis pärib väheseid omadusi vanemklassist (põhiklassist) lasteklassini (tuletatud klass).

Klasside rakendamisel ja pärimisel, kui soovime määratleda samad funktsioonid nii baas- kui ka tuletatud klassis, kasutame koos põhiklassi funktsiooniga märksõna “virtuaalne”. See 'virtuaalne' funktsioon täpsustab, et sama funktsioon määratletakse uuesti või ületatakse tuletatud klassis.

Abstraktne klass on puhta virtuaalse funktsiooniga klass. Mis on puhas virtuaalne funktsioon? Puhas virtuaalne funktsioon on virtuaalne funktsioon, millel puudub keha ja mis on määratud kui 0. Seda tüüpi funktsioon rakendatakse siis, kui vajame funktsiooni, kuid me ei tea praegu, mis selle funktsioon on. Seda funktsiooni tuleb rakendada või määratleda tuletatud klassis. Kui ei, siis tuletatud klassist saab ka abstraktne klass.

Puhas virtuaalne funktsioon on määratletud järgmiselt:

virtuaalne tühine funktsioon () = 0;

C ++ abstraktse klassi näide

Siin käsitleme C ++ abstraktse klassi näidet üksikasjadega:

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

Väljund:

Siin on Sample_Class põhiklass ja Derived_Class tuletatakse Sample_Classist. Puhas virtuaalne funktsioon nimega sample_func () kuulutatakse põhiklassis. See on määratud 0-le, mis tähendab, et sellel pole kedagi ja funktsiooni sees ei rakendata midagi. Seega on põhiklassist saanud abstraktne klass, kuna sellel on puhas virtuaalne funktsioon. Algselt, kui Derived_Class tuletatakse põhiklassist, muutub see ka abstraktseks klassiks. Kuid tuletatud klassis määratletakse klass sample_func (), mis takistab tuletatud klassist muutmast abstraktseks klassiks. Kui tuletatud klassiobjekt luuakse ja funktsiooni kutsutakse, trükitakse väljund kujul „puhas virtuaalne funktsioon on rakendatud”.

Abstraktset klassi ei saa realiseerida, mis tähendab, et me ei saa abstraktse klassi jaoks eksemplari ega objekti luua. Objekti ei saa luua, kuna klassi pole täielikult rakendatud. See on tegelikult alus klassile, mis rakendatakse täielikult hiljem. Kuid abstraktse klassi jaoks saab luua näpunäiteid või viiteid. Seda kursorit saab kasutada tuletatud klassifunktsioonide kutsumiseks. Abstraktsel klassil võivad olla puhtalt virtuaalse funktsiooniga ka muud andmeliikmed ja funktsioonid, mis on sarnased tavalise klassi teostusega.

Ülaltoodud punkti saab selgitada allpool oleva programmi abil

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

Väljund:

Siin saame vea, kuna objekti ei saa abstraktse klassi jaoks luua.

Selle asemel saab rakendada 2. ja 3. koodirea, luua osuti ja seda saab kasutada tuletatud klassifunktsiooni kutsumiseks.

Ülaltoodud funktsioonis on klass1 põhiklass ja kuna sellel on puhas virtuaalne funktsioon (func1), on see muutunud abstraktseks klassiks. Klass 2 on tuletatud vanemklassist Klass 1. Func1 on määratletud tuletatud klassis. Põhifunktsioonis, kui proovime luua tüüpi baasklassi objekti, saame vea, kuna objekte ei saa luua abstraktse klassi jaoks. Kui proovime luua põhiklassitüübi kursorit, luuakse see edukalt ja saame suunata selle tuletatud klassile. Seda kursorit saab kasutada tuletatud klassifunktsiooni kutsumiseks.

Abstraktsel klassil võib olla konstruktor, mis sarnaneb tavalise klassi teostusega. Hävitaja puhul võime kuulutada puhta virtuaalse hävitaja. Klassile eraldatud mälu kustutamiseks on oluline hävitaja. Puhas virtuaalne hävitaja on hävitaja, mis omistatakse nullile, kuid selle peab määratlema sama klass, kuna hävitajat tavaliselt ei ignoreerita.

C ++ abstraktklassi konstruktori ja destruktori rakenduse näide

Siin käsitleme C ++ abstraktse klassi näidet üksikasjadega:

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

Väljund :

Ülaltoodud näites on põhiklass abstraktne klass, millel on puhas virtuaalne funktsioon func1 (), konstruktor ja puhas virtuaalne destruktor. Puhas virtuaalne funktsioon on määratletud tuletatud klassis, takistades seega tuletatud klassi muutumist abstraktseks klassiks. Puhta virtuaalse hävitaja määratleb Base väljaspool klassi asuv klass. Kui tahame määratleda klassist väljaspool asuva klassi liikmefunktsiooni, tuleks kasutada ulatuse eraldusfunktsiooni operaatorit, nagu näites näidatud. Luuakse põhiklassi kursor ja osutatakse tuletatud klassile. Kui hävitajat kutsutakse 'kustutama', kutsutakse kõigepealt tuletatud klassi hävitaja ja seejärel põhiklassi hävitaja.

Järeldus

Seega võib abstraktse klassi kohta kõike kokku kogudes öelda, et abstraktne klass on puhta virtuaalse funktsiooniga klass. See puhas virtuaalne funktsioon tuleb määratleda tuletatud klassis, kui mitte, siis tuletatud klassist saab ka abstraktne klass. Objekti ei saa luua abstraktse klassi jaoks, kuid võib luua ka osuti, millele saab osutada tuletatud klassile.

Soovitatavad artiklid

See on C ++ abstraktklassi juhend. Siin käsitleme abstraktse klassi tutvustamist ning konstruktori ja destruktori rakendamist C ++ koos oma näitega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. Abstraktne klass Pythonis
  2. Abstraktne klass Java keeles
  3. C ++ konstruktor ja hävitaja
  4. Esmatähtis C ++ korral
  5. Ülekaalus Java
  6. C ++ 11 peamist funktsiooni ja eelist

Kategooria: