OOП  Примери

Конструктор и деструктор на класа
 

    Иницијализацијата на објектите овозможува поголема функционалност на програмите. Уништувањето на објектите исто така овозможува поголема функционалност. Во C++ овие дејства се овозможени преку механизмите на конструктори и деструктори. Тие се посебни методи на класите.

    Конструктор во C ++ е посебен метод што автоматски се повикува кога се креира објект од типот класа. Конструкторите се повикуваат секогаш кога се креира објект од таа класа.

Една класа може да има повеќе конструктори, не само еден.

    Конструкторот што не прима параметри се нарекува
подразбирлив(default) конструктор.  Доколку кодот на класата не го содржи овој конструктор, компајлерот автоматски него го обезбедува. На тој начин, класата добива најмалку еден конструктор, дури и ако истиот не е експлицитно наведен.  Програмерот може и експлицитно да обезбеди подразбирлив конструктор. Доколку програмерот обезбеди друг конструктор (со параметри), подразбирливиот конструктор нема да биде обезбеден од страна на компајлерот

    За да креирате конструктор, користете го истото име како класата, проследено со загради ():

Пример

class MоjaKlasa {     // klasa
 
public:          
   
MоjaKlasa () {     // Konstruktor
   
}
};

int main() {
 
MоjaKlasa MojObjekt;// Kreira objekt MojObjekt od tipot  MojaKlasa (Ovaa naredba ce go povika konstruktorot)
  return 0;
}

Забелешка: Конструкторот има исто име како и класата, тој е секогаш јавен.

Пример: Подразбирлив и параметризиран конструктор

#include <iostream>
using namespace std;
class moja_klasa {
    public:
        int a;
    moja_klasa();        //deklaracija na default konstruktor
    moja_klasa(int x); //deklaracija na  konstruktor so parametri
    void pokazhi();
};
moja_klasa::moja_klasa(int x) //konstruktor so parametri
{
    cout<<"Vo parametriziraniot konstruktor\n";
    cout<<"x = "<<x<<endl;
    a=x;
}

moja_klasa::moja_klasa() //default konstruktor
{
    cout<<"Vo default konstruktor\n";
    a=10;
}
void moja_klasa::pokazhi()
{
    cout<<a<<endl;
}

int main()
{
    moja_klasa ob1;
    ob1.pokazhi();
    moja_klasa ob(4);
    ob.pokazhi();
}


Параметри на конструкторот
 

    Конструкторите исто така можат да имаат параметри (исто како и функциите), што може да биде корисно за поставување на почетни вредности за атрибутите на класата.

    Следната класа има атрибути на марка, модел и година и конструктор со различни параметри. Внатре во конструкторот ги поставуваме атрибутите еднакви на параметрите на конструкторот
(
marka = x, итн.). Кога го повикуваме конструкторот (со создавање објект од класата), на конструкторот му пренесуваме параметри, со што вредноста на соодветните атрибути ќе се постави на истата:

#include<iostream>
#include<string>
using namespace std;
class kola
{        
 public:         
    string marka; 
    string model; 
    int godina;     
    kola(string x, string y, int z) { // konstruktor so parametri
      marka = x;
      model = y;
      godina = z;
    }
};
int main() {
  // Kreira kola objekti i povikuva konstruktor so razlicni vrednosti
 kola kola1("BMW", "X5", 1999);
 kola kola2("Ford", "Mustang", 1969);
  // Pecati
 cout << kola1.marka << " " << kola1.model << " " << kola1.godina << "\n";
 cout<<  kola2.marka << " " << kola1.model << " " << kola1.godina << "\n";
 return 0;
}

    Исто како и функциите, и конструкторите можат да се дефинираат надвор од класата. Прво, декларирајте го конструкторот внатре во класата, а потоа дефинирајте го надвор од класата со наведување на името на класата, проследено со операторот за Scope :: оператор, а потоа и со името на конструкторот (што е иста со класата) :

#include<iostream>
#include<string>
using namespace std;
class kola {       
  public:         
    string marka; 
    string model; 
    int godina;     
    kola(string x, string y, int z); // Deklaracija na konstruktor  
};

// Konstruktor definicija nadvor od klasata
kola::kola(string x, string y, int z) {
      marka = x;
      model = y;
      godina = z;
}

int main() {
    // Kreira kola objekti i povikuva konstruktor so razlicni vrednosti
    kola kola1("BMW", "X5", 1999);
    kola kola2("Ford", "Mustang", 1969);
    // Pecati
    cout << kola1.marka << " " << kola1.model << " " << kola1.godina << "\n";
    cout<< kola2.marka << " " << kola1.model << " " << kola1.godina << "\n";
   
return 0;
}