Johdanto abstraktiluokkaan C ++

Luokka on käyttäjän määrittelemä tietotyyppi, ja sillä on omat datajäsenensä ja toiminnot. Jäseniä ja toimintoja voidaan käyttää luomalla luokan objekti tai ilmentymä. Muisti varataan luokalle vain, kun objekti luodaan.

Kun haluamme saada joitain käyttäytymismalleja tai ominaisuuksia luokasta toiseen, käytämme perinnön käsitettä. Tällä menetelmällä peritään muutama ominaisuus vanhemmaluokasta (perusluokasta) lastenluokkaan (johdettu luokka).

Kun haluamme määritellä samat toiminnot sekä pohja- että johdetussa luokassa, luokan toteutuksessa ja perinnössä käytämme avainsanaa 'virtuaali' ja perusluokkafunktiota. Tämä 'virtuaalinen' toiminto määrittelee, että sama toiminto määritetään uudelleen tai se korvataan johdetussa luokassa.

Abstrakti luokka on luokka, jolla on puhdas virtuaalitoiminto. Mikä on puhdas virtuaalitoiminto? Puhdas virtuaalifunktio on virtuaalifunktio, jolla ei ole runkoa ja joka on määritetty nollaksi. Tämäntyyppinen toiminto toteutetaan, kun tarvitsemme toimintoa, mutta emme tällä hetkellä tiedä, mikä sen toiminta on. Tämä toiminto on otettava käyttöön tai määritettävä johdetussa luokassa. Jos ei, niin johdetusta luokasta tulee myös abstrakti luokka.

Puhdas virtuaalitoiminto määritellään seuraavasti:

virtuaalinen tyhjä func () = 0;

Esimerkki abstraktista luokasta C ++: ssa

Tässä keskustellaan esimerkistä abstraktista luokasta C ++: ssa yksityiskohtaisesti:

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

lähtö:

Tässä Sample_Class on perusluokka ja Derived_Class on johdettu Sample_Classista. Puhdas virtuaalifunktio nimeltään sample_func () julistetaan perusluokassa. Sille on osoitettu 0, mikä tarkoittaa, että siinä ei ole ketään eikä toiminnassa ole toteutettu mitään. Täten perusluokasta on tullut abstrakti luokka, koska sillä on puhdas virtuaalifunktio. Aluksi, kun Derived_Class johdetaan perusluokasta, siitä tulee myös abstrakti luokka. Mutta johdetussa luokassa määritetään luokka sample_func (), joka estää johdetusta luokasta tulemasta abstraktiksi luokkaksi. Kun johdettu luokkaobjekti luodaan ja funktiota kutsutaan, tulostukseksi tulostetaan "puhdas virtuaalitoiminto on toteutettu".

Abstraktia luokkaa ei voida toteuttaa, mikä tarkoittaa, että emme voi luoda ilmentymää tai objektia abstraktille luokalle. Objektia ei voida luoda, koska luokkaa ei ole toteutettu kokonaan. Se on itse asiassa perusta luokalle, joka toteutetaan täysin myöhemmin. Mutta abstraktille luokalle voidaan luoda viitteitä tai viitteitä. Tätä osoitinta voidaan käyttää johdettujen luokan funktioiden kutsumiseen. Abstraktissa luokassa voi olla muita tietojäseniä ja toimintoja, jotka ovat samanlaisia ​​kuin normaali luokan toteutus, sekä puhdas virtuaalinen toiminto.

Yllä oleva kohta voidaan selittää alla olevan ohjelman avulla

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

lähtö:

Tässä saamme virheen, koska objektia ei voida luoda abstraktille luokalle.

Sen sijaan 2. ja 3. koodirivi voidaan toteuttaa, voidaan luoda osoitin, jota voidaan käyttää johdetun luokkatoiminnon kutsumiseen.

Tässä yllä olevassa toiminnossa luokka1 on perusluokka ja koska sillä on puhdas virtuaalifunktio (func1), siitä on tullut abstrakti luokka. Luokka 2 on johdettu pääluokasta luokka1. Func1 on määritelty johdetussa luokassa. Päätoiminnossa, kun yritämme luoda perustason luokan objektia, saamme virheen, koska objekteja ei voida luoda abstraktille luokalle. Kun yritämme luoda perusluokkatyypin osoittimen, se luodaan onnistuneesti ja voimme osoittaa sen johdetulle luokalle. Tätä osoitinta voidaan käyttää johdetun luokkafunktion kutsumiseen.

Abstraktilla luokalla voi olla rakentaja, joka on samanlainen kuin normaali luokan toteutus. Hävittäjän tapauksessa voimme julistaa puhtaan virtuaalisen hävittäjän. On tärkeää, että sinulla on tuhoaja luokalle varatun muistin poistamiseksi. Puhdas virtuaalinen tuhoaja on tuhoaja, joka on luokiteltu arvoon 0, mutta sen on määriteltävä samassa luokassa, koska hävittäjää ei yleensä ohiteta.

Esimerkki abstraktin luokan rakentajan ja destruktorin toteutuksesta C ++: ssa

Tässä keskustellaan esimerkistä abstraktista luokasta C ++: ssa yksityiskohtaisesti:

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

Tulos :

Tässä, yllä olevassa esimerkissä, perusluokka on abstrakti luokka, jossa on puhdas virtuaalifunktio func1 (), rakentaja ja puhdas virtuaalinen tuhoaja. Puhdas virtuaalifunktio määritetään johdetussa luokassa, mikä estää johdetusta luokasta tulemasta abstraktiksi luokkaksi. Puhtaan virtuaalisen tuhoajan määrittelee luokan ulkopuolella oleva Base-luokka. Jos haluamme määritellä luokan ulkopuolisen luokan jäsentoiminnon, laajuusresoluutio-operaattoria tulisi käyttää esimerkissä esitetyllä tavalla. Perusluokkatyyppinen osoitin luodaan ja osoitetaan johdetulle luokalle. Kun hävittäjää kutsutaan 'poistamalla', ensin johdetaan johdettua luokan hävittäjää ja sitten kutsutaan perusluokan hävittäjää.

johtopäätös

Näin ollen kokoamalla kaiken abstraktista luokasta voidaan sanoa, että abstrakti luokka on luokka, jolla on puhdas virtuaalifunktio. Tämä puhdas virtuaalifunktio on määriteltävä johdetussa luokassa, jos ei, niin johdetusta luokasta tulee myös abstrakti luokka. Objektia ei voida luoda abstraktille luokalle, mutta voidaan luoda osoitin, joka voidaan osoittaa johdetulle luokalle.

Suositellut artikkelit

Tämä on opas tiivistelmäluokkaan C ++. Tässä keskustellaan abstraktin luokan johdannosta sekä konstruktorin ja destruktorin toteutuksesta C ++: ssa esimerkillään. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja-

  1. Abstrakti luokka Pythonissa
  2. Abstraktin luokan Java
  3. Suunnittelija ja tuhoaja C ++: ssa
  4. Ohittaminen C ++: ssa
  5. Ylivoimainen Java
  6. C ++: n 11 tärkeintä ominaisuutta ja hyötyä