Professional Documents
Culture Documents
Предавање 1
Предавање 1
ОБЈЕКТНО – ОРИЕНТИРАНО
ПРОГРАМИРАЊЕ
Структури
ООП - Структури
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Дефинирање на структури
Структурите во C претставуваат колекции (агрегации) на
логички поврзани податоци од различни видови во единствена
целина, заради поедноставна претстава и манипулација.
Структурите во C се нехомогени структури на податоци.
Во комбинација со покажувачите претставуваат основа за
креирање на сложените динамички структури на податоци како
листи, магацини, редови, стебла, ...
Општиот облик за дефинирање на структури во C е следниов:
struct ime_na_strukturata
{
field-type field-name; /* deklaracii na promenlivi */
field-type field-name;
...
} lista_na_promenlivi;
Пример:
struct student struct produkt
{ {
char ime[30];
char ime[30]; float cena;
int indeks; };
float prosek;
};
struct дефинира структура со име student
student е името на структурата (податочен тип) кое се користи за
декларирање на променливи од типот структура
student содржи три елементи (членови, компоненти):
една низа од 30 знаци – ime; student
еден цел број – indeks; и ime
еден децимален број – prosek. indeks
prosek
Членови на структура
Структурите не можат да содржат член што претставува
структура од истиот тип (инстанца на самите себе);
На пример, променлива од типот struct vraboten не може
да е декларирана во дефиницијата на struct vraboten
Структурите може да содржат член што претставува структура
од друг тип;
Структурите може да содржат член покажувач кон структура од
истиот тип;
Со дефиницијата на структура не се резервира никаков
мемориски простор. Со неа само се воведува нов податочен
тип од кој ќе може да се декларираат променливи од типот
структура.
prva_godina[i].index
prva_godina[i].ime[0]
Операции со структури
Единствени операции што се дозволени со
структурите се:
(=) доделување на променлива од типот структура на
друга променлива од истиот тип;
(&) земање на адресата на променлива од типот
структура;
(.) пристап до членовите на структурата;
(sizeof) одредување на должината на структурата.
najdobar = najubav;
pok = &najdobar;
i = najdobar.index
sizeof(struct student) или sizeof(najdobar)
Иницијализација
Структурите можат да бидат иницијализирани со
користење на иницијализаторска листа , како и низите.
За да се иницијализира структура, по името на
променливата во дефиницијата се става знакот = и во
големи загради се доделуваат вредностите на секој од
членовите на структурата посебно:
struct karta {
char *brojka;
char *boja;
};
struct karta Karta = {“Dva”, “Srce”};
Иницијализација (2)
Ако имаме помалку елементи во листата отколку што
има членови, тогаш останатите членови се
поставуваат на 0 или NULL ако членот е покажувач.
На променливите кои се структури кои се
дефинирани надвор од функциската дефиниција
автоматски им се доделуваат вредности 0 или NULL
на членовите ако не се експлицитно дефинирани.
Променливите кои се структури можат да бидат
иницијализирани и со наредба на доделување на
вредност на друга променлива која е структура од
истиот тип.
#include <stdio.h>
/* definicija na struktura karta */
struct karta {
char *brojka; /* pokazhuvach brojka */
char *boja; /* pokazhuvach boja */
}; /* kraj na strukturata karta */
int main()
{
struct karta aCard; /* promenliva od strukturata karta */
struct karta *cardPtr; /* pokazhuvach do strukturata karta */
typedef
Креира синоним за веќе дефиниран тип
Вообичаено се употребува за креирање скратени имиња на
типови
Пр.
typedef int celbroj;
typedef float realen;
celbroj I,j;
realen x,y;
#include <stdio.h>
typedef struct point { typedef struct rect {
float x; tocka pt1;
float y; tocka pt2;
} tocka; } pravoagolnik;
tocka centar(pravoagolnik p) {
tocka c;
c.x=(p.pt1.x + p.pt2.x)/2;
c.y=(p.pt1.y + p.pt2.y)/2;
return c;
}
float povrsina(pravoagolnik r) {
return((r.pt2.x-r.pt1.x)*(r.pt2.y-r.pt1.y));
}
Објектно – ориентирано програмирање 17
Пример за употреба на структури
ООП - Структури
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
int main() {
tocka pt, sredina; pravoagolnik prozor;
pravoagolnik ekran={{2,3}, {4,5}};
pt.x=pt.y=0; prozor.pt1 = pt;
prozor.pt2.x = 5; prozor.pt2.y = 3;
sredina = centar(ekran);
printf("Centar na pravoagolniokot
(%3.1f,%3.1f):(%3.1f,%3.1f) e vo tockata
(%3.1f,%3.1f)\n", ekran.pt1.x, ekran.pt1.y,
ekran.pt2.x, ekran.pt2.y, sredina.x,
sredina.y);
printf("Povrsinata na pravoagolniokot
(%3.1f,%3.1f):(%3.1f,%3.1f) e %3.1f\n",
prozor.pt1.x, prozor.pt1.y, prozor.pt2.x,
prozor.pt2.y, povrsina(prozor)); return 0; }
Објектно – ориентирано програмирање 18
Употреба на структури со функции членки
ООП - Структури
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
void pravoagolnik::pecati(void)
{ pt1.pecati(); printf(":"); pt2.pecati(); }
tocka pravoagolnik::centar(void)
{ tocka c; c.x=(pt1.x + pt2.x)/2;
c.y=(pt1.y + pt2.y)/2; return c;}
float pravoagolnik::povrsina(void)
{ return((pt2.x-pt1.x)*(pt2.y-pt1.y)); }
int main() {
tocka pt, sredina; pravoagolnik prozor;
pravoagolnik ekran={{2,3}, {4,5}};
pt.x=pt.y=0;
prozor.pt1 = pt;
prozor.pt2.x = 5;
prozor.pt2.y = 3;
sredina = ekran.centar();
Енумерација
Множество од цели броеви претставени со симболички вредности
Енумерирани константи – слични на симболичките константи, чии
вредности автоматски се поставуваат:
вредности почнуваа од 0 и се зголемуваат за 1 за секој
нареден симбол;
вредностите може експлицитно да се доделат со операторот =;
имињата на симболите мора да бидат уникатни.
Со дефиницијата на енумерација се воведува нов податочен тип.
Променливите од овој тип може да ги примаат вредностите само
на дефинираните симболички константи за тој тип.
Унии
Единствена меморија која содржи различни типови на
променливи во текот на времето;
Содржи само еден податок во даден момент истовремено;
Членовите на унијата ја делат меморијата;
Декларирањето на унија е исто како и декларирањето на
структура:
union Number { Number
int x; xy
float y;
} br;
Преведувачот обезбедува доволно простор за чување на
најголемата променлива во дефиницијата на унијата.
Останатите променливи за сместување на своите вредности
искористуваат само дел од оваа меморија. Вредностите на
членовите на унијата се доделуваат слично како и за
структурите, со тоа што во исто време во меморијата може да
биде присутен само еден член.
Дефинирање унија
int main()
{
union number value;
value.x = 100; /* stavi cel broj vo unijata */
printf( "%s\n%s\n%s%d\n%s%f\n\n",
"Stavi cel broj vo celobrojniot chlen",
"i ispechati gi dvata chlena.","int: ", value.x,
"double:\n", value.y );
return 0;
}
Излезот кој се добива може да биде:
Stavi cel broj vo celobrojniot chlen
i ispechati gi dvata chlena.
int: 100
double:
-9255959211743313600000000000000000000000000000000000000000.000000
Прашања?