Увод у апстрактни разред у Ц ++

Класа је тип података који дефинише корисник и има своје чланове и функције података. Чланови и функције могу се користити креирањем објекта или инстанце те класе. Меморија се додељује класи само када је објект креиран.

Када желимо да изведемо нека понашања или карактеристике из једне класе у другу класу, користимо концепт наследства. Ово је метода наслеђивања неколико својстава од родитељске класе (основне класе) до дечије класе (изведена класа).

У имплементацији и насљеђивању класе, када желимо дефинирати исте функције и у основној и у изведеној класи, користимо кључну ријеч 'виртуална', заједно с функцијом основне класе. Ова "виртуална" функција одређује да је иста функција редефинирана или поништена у изведеној класи.

Апстрактна класа је класа са чистом виртуелном функцијом. Е сад, шта је чиста виртуелна функција? Чиста виртуална функција је виртуална функција која нема тијело и додијељена је као 0. Ова врста функције се имплементира кад нам треба функција, али тренутно не знамо која је њена функција. Ову функцију треба имплементирати или дефинирати у изведеној класи. Ако не, тада изведена класа такође постаје апстрактна класа.

Чиста виртуелна функција је дефинисана на следећи начин:

виртуал воид фунц () = 0;

Пример апстрактне класе у Ц ++

Овдје ћемо расправљати о примјеру апстрактне наставе у Ц ++ са детаљима:

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

Излаз:

Овде је Сампле_Цласс основна класа, а Деривед_Цласс је изведен из Сампле_Цласс. Чиста виртуална функција звана сампле_фунц () декларирана је у основној класи. Додељено је 0, што значи да нема никога и ништа се не имплементира унутар функције. Стога је основна класа постала апстрактна класа јер има чисту виртуелну функцију. У почетку, када је изведени_Цласс изведен из основне класе, он такође постаје апстрактна класа. Али у изведеној класи је дефинисана класа сампле_фунц (), што спречава да изведена класа постане апстрактна класа. Када се створи изведени објект класе и назове функција, добићемо испис исписан као 'реализирана је чиста виртуална функција'.

Апстрактна класа се не може инстанцирати, што значи да не можемо створити инстанцу или објект за апстрактну класу. Објект се не може креирати јер класа није имплементирана у потпуности. То је заправо основа за класу која ће се касније у потпуности имплементирати. Али показивачи или референце могу се створити за апстрактну класу. Овај показивач се може користити за позивање изведених функција класе. Апстрактна класа може имати друге чланове података и функције сличне уобичајеној имплементацији класе, заједно са чистом виртуалном функцијом.

Горња тачка може се објаснити кроз програм у наставку

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

Излаз:

Овде ћемо добити грешку јер објект не може бити креиран за апстрактну класу.

Уместо тога, могу се имплементирати 2. и 3. реда кода, може се креирати поинтер и може се користити за позивање изведене функције класе.

Овде је у горњој функцији Цласс1 основна класа и пошто има чисту виртуелну функцију (фунц1) постала је апстрактна класа. Цласс2 је изведен из матичне класе Цласс1. Фунц1 је дефинисан у изведеној класи. У главној функцији, када покушамо да створимо објект типа основне класе, добићемо грешку, јер се објекти не могу креирати за апстрактну класу. Док када покушамо да створимо показивач типа основне класе, он ће бити успешно креиран и можемо га указати на изведену класу. Овај показивач се може користити за позивање изведене функције класе.

Апстрактна класа може имати конструктор сличан уобичајеној имплементацији класе. У случају деструктора можемо прогласити чистим виртуалним деструктором. Важно је имати деструктор за брисање меморије додељене класи. Чисти виртуални деструктор је деструктор који је додијељен 0, али га мора дефинирати иста класа, јер деструктор обично није прескочен.

Пример примене конструктора и деструктора за апстрактну класу у Ц ++

Овдје ћемо расправљати о примјеру апстрактне наставе у Ц ++ са детаљима:

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

Излаз :

Овдје, у горњем примјеру, основна класа је апстрактна класа са чистом виртуалном функцијом фунц1 (), конструктором и чистим виртуалним деструктором. Чиста виртуална функција је дефинирана у изведеној класи чиме спречава да изведена класа постане апстрактна класа. Чисти виртуални деструктор је дефинисан од стране Басе класе изван класе. Ако желимо да дефинирамо функцију члана класе изван класе, треба користити оператора резолуције опсега као што је приказано у примеру. Ствара се показивач типа основне класе и упућује на изведену класу. Када се деструктор зове помоћу 'делете', прво се позива деструктор изведене класе, а затим се зове деструктор основне класе.

Закључак

Дакле, за састављање свега о апстрактној класи можемо рећи да је апстрактна класа класа са чистом виртуелном функцијом. Ова чиста виртуална функција мора бити дефинисана у изведеној класи, ако не, тада изведена класа такође постаје апстрактна класа. Објект се не може креирати за апстрактну класу, али може се створити показивач који се може указати на изведену класу.

Препоручени чланци

Ово је водич за Сажетак класе на Ц ++. Овде смо расправљали о уводу у апстрактну класу, као ио примени конструктора и деструктора у Ц ++ заједно са његовим примером. Такође можете погледати следеће чланке да бисте сазнали више -

  1. Сажетак класе у Питхон-у
  2. Сажетак класе на Јави
  3. Конструктор и деструктор у Ц ++
  4. Превладавање у Ц ++
  5. Превладавање у Јави
  6. Топ 11 функција и предности Ц ++

Категорија: