OOП  СТРУКТУРИ

    Структура е збир на променливи од различни типови на податоци под едно име. Слична е со класите по тоа што и двете имаат колекција на податоци од различни типови .

    На пример: Сакате да зачувате некои информации за некое лице: неговото / нејзиното име, матичен број и плата. Можете лесно да креирате различни варијабли ime, emb, plata за да ги зачувате овие информации одделно.

    Сепак, во иднина, вие би сакале да зачувате информации за повеќе лица. Сега, треба да креирате различни варијабли за секоја информација по лице: ime1, emb1, plata1, ime2, emb2, plata2.

    Можете лесно да визуелизирате колку би изгледал голем и неуреден кодот. Исто така, бидејќи не би постоела никаква врска помеѓу променливите (информации), тоа ќе биде застрашувачка задача.

    Подобар пристап ќе биде собирање на сите поврзани информации под единствено име Licnost и нивно користење за секоја личност. Сега, кодот изгледа многу почисто, читливо и ефикасно исто така.

    Оваа збирка на сите поврзани информации под едно име Licnost е структура.

    Декларирање структура во програмски јазик  C ++ се прави на следниот начин

struct Licnost 
{
    char ime[50];
    int emb;
    float plata;
};

    Резервиран збор за структура е struct , a во внатрешноста на витканите загради, можете да декларирате еден или повеќе делови/членови од таа структура.(да декларирате променливи од различен тип).

Вгнездени структури

Пример 1 Да се креира структура Licnost  со елементи ime-стринг, email - string и film - друга структура Filmovi која се состои од елементи naslov - string и godina - int. Потоа да се декларираат две променливи - Licnost, да се внесат од тастатура и да се прикажат на монитор.

#include <iostream>
#include <string>

using namespace std;

struct filmovi
{
    string naslov;
    int godina;
};

struct licnost
{
    string ime;
    string email;
    filmovi film;
} lic_1;

int main()
{
licnost lic_2;

cout<<"Vnesete ime, email, naslov na omileniot film i godina na snimanje na filmot "<<endl;
cin>>lic_1.ime>>lic_1.email>>lic_1.film.naslov>>lic_1.film.godina;
cout<<"ime "<<lic_1.ime<<" email "<<lic_1.email<<" naslov na omileniot film "<<lic_1.film.naslov<<" godina na snimanje na filmot "<<lic_1.film.godina<<endl;

cout<<"Vnesete ime, email, naslov na omileniot film i godina na snimanje na filmot "<<endl;
cin>>lic_2.ime>>lic_2.email>>lic_2.film.naslov>>lic_2.film.godina;
cout<<"ime "<<lic_2.ime<<" email "<<lic_2.email<<" naslov na omileniot film "<<lic_2.film.naslov<<" godina na snimanje na filmot "<<lic_2.film.godina<<endl;

return 0;
}

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

Пример 2 Да се креира структура Licnost  со елементи ime-стринг и godini - int со конструктор во кој ќе бидат дадени default вредности на елементите. Потоа во главниот програм да се декларира една променлива од типот - Licnost и да се доделат вредности, и истите да се прикажат на монитор со функција print која ќе биде повикана пред и по доделувањето на вредностите. Функцијата да биде дел од структурата.

#include <iostream>
#include <string>
using namespace std;

struct licnost
{
    string ime;
    int godini;

    //konstruktor so default vrednosti
    licnost()
    {
        ime = "Trpe";
        godini = 77;
    }

    void print();    // funkcija kako del od strukturata
};

void licnost::print() // funkcija za strukturata
{
    cout << ime << " " << this->godini << endl;
}

int main()
{
    licnost p1;

    p1.print(); // gi pecati default vrednostite

    p1.ime = "Petko";
    p1.godini = 17;

    p1.print(); // gi pecati prethodno zadadenite vrednostite
}

Пример 3 Да се креира структура pravoagolnik  со елементи страните a и b - double. Потоа во главниот програм да се декларира една променлива од типот - pravoagolnik,  и страните да се внесат од тастатура. Да се креираат функции за пресметка на обем и површина во структурата и да се повикаат од главниот програм.

#include <iostream>
using namespace std;
struct pravoagolnik
{
    double a, b;
    double povrsina()
    {
        return a * b;
    }
    double obem()
   
{
        return 2 * (a + b);
    }
};
int main()
{
pravoagolnik P;
cout<<"Vnesete gi stranite a i b "<<endl;
cin>>P.a>>P.b;
cout<<" Obemot na pravoagolnikot e "<<P.obem()<<endl;
cout<<" Povrsinata na pravoagolnikot e "<<P.povrsina()<<endl;
return 0;
}
 

Покажувач кон структура

Покажувачите кон структурите мораат да бидат од истиот сопствен како и структурата кон која покажуваат.

#include <iostream>

using namespace std;

struct temp {

    int i;

    float f;

};

int main() {

    temp *ptr,s;

    ptr=&s;

    cout<<"Vnesete cel broj "<<endl;

    cin>>(*ptr).i;

    cout<<"Vnesete decimalen broj "<<endl;

    cin>>(*ptr).f;

    cout<<"Celiot broj e "<<(*ptr).i<<endl;

          cout<<"Decimalniot broj e "<<(*ptr).f<<endl;

    return 0;

}

 

Пример 4 Да се креира структура filmovi  која се состои од елементи naslov - string и godina - int. Потоа да се декларира една променлива film која е структура filmovi, потоа да се декларира покажувач кон оваа структура со име pok_film и на овој покажувач да му се даде адресата на промеливата filmДа се внесат од тастатура насловот и годината на овој филм и да се прикажат на монитор (со користење на покажувачот).

#include <iostream>
#include <string>
using namespace std;

struct filmovi
{
    string naslov;
    int godina;
};

int main ()
{
    string mojstring;

    filmovi film;
    filmovi *pok_film;
    pok_film = &film;

    cout << "Vnesete naslov na filmot : ";
    //getline (cin, pok_film->naslov);   //moze vaka
    cin>>(*pok_film).naslov;             //moze i vaka

    cout << "Vnesete godina: ";
    cin >> pok_film->godina;

    cout << "\nVie vnesovte:\n";
    cout <<"Naslov na filmot "<< pok_film->naslov;
    cout << " Snimen " << pok_film->godina << " godina\n";

    return 0;
}

Структури како параметри - аргументи на функциите

Пример 5 Да се креира структура Licnost  со елементи red_br - int ime-стринг и visina- float . Потоа во главниот програм да се декларира една променлива од типот - Licnost и да се доделат вредности на сите елементи, и истите да се прикажат на монитор со функција prikazi која ќе биде повикана по доделувањето на вредностите. Функцијата да биде надвор од структурата и како параметар да и биде дадена проманливата која е декларирана како структура.

#include <iostream>
#include <string>
using namespace std;

struct licnost
{
    int red_br;
    string ime;
    float visina;
};

void prikazi(licnost nekoj);

int main()
{
    licnost L;
    L.red_br = 2;
    L.ime = "Petko";
    L.visina=1.90;

    prikazi(L);
}

void prikazi(licnost nekoj)
{
    cout << "Reden broj : "<<nekoj.red_br;
    cout << " ime : " << nekoj.ime << endl;
    cout << " visina : " << nekoj.visina<< endl;
}

Сопствен тип на податок структура

Пример 6 Да се декларира сопствен тип на податок telefon со елементи ime - покажувач кон низа од карактери и со елементи ime - покажувач кон низа од карактери и broj - цел број, и еден таков тип на податок што се нарекува TELEFON. Потоа во главниот програм да се дакларира променлива tel_br , да се доделат вредности на нејзините елементи-делови и да се прикажат на монитор.  

#include<iostream>
using namespace std;

typedef struct telefon
{
    char *ime;
    int broj;
}TELEFON;

int main()
{
    TELEFON tel_br;

    tel_br.ime = "Nekoj ";
    tel_br.broj = 12345;

    cout << "Ime: " << tel_br.ime << '\n';
    cout << "Broj na telefon: " << tel_br.broj;

    return 0;
}