За pre :
Намалуваш или зголемуваш тоа што треба за еден и го враќаш тековниот објект со *this. (функцијата враќа референца )
Гледаш дека функцијата враќа објект, а ти се обидуваш да вратиш kofein..пробај да компајлираш и читај грешките...помагаат многу
PHP:
Caj& operator--()
{
kofein--;
return kofein ;
// ili return --kofein;
// return kofein--; // vo red? НЕ
}
За пост:
Правиш копија од објектот. оргиналот намалуваш или зголемуваш и враќаш копијата како излез од функција.
Функцијата враќа објект ( без знакот "&" )
PHP:
Caj operator--(int) // ова тука се пишува само така за компајлерот да може да разликува кое е за пре а кое е за пост..затоа што се слични многу.
{
Caj tmp(*this); // користиш copy конструктор.
kofein--;
return tmp;
}
----------------------------------------------------------------------------------------------------------------
PHP:
Caj operator!=(const Caj &c1,const Caj &c2)
{
if((c1.kofein<c2.kofein+3)&&(c2.kofein>c1.kofein+3))
return *this;
}
Како прво == , >=, <= != итн се логички операции, значи треба да врати дали тој израс е точен или не т.е bool тип.
Потоа за да споредиш дали разликата е макс 3..прво ќе најдеш макс и мин и ако разликата е помал или еднаков од 3 тогаш се исти и враќа точно.
Исто така нема потреба да прима 2 параметри како caj1, caj2 затоа што до caj1 веќе имаш пристап со тоа што caj1 ја повикува функцијата, и внатре кога и да напишеш kofеин, gramovi се мисли за caj1.
PHP:
bool operator!=(const Caj &c2)
{
int rez = ((kofein > c2.kofein)?kofein:c2.kofein)-((kofein > c2.kofein)?c2.kofein:kofein); //макс -мин
if(rez <= 3)
return true;
return false;
}
И уште едно прашање; во една класа private членови се …….. и “листа (динамички алоцирана низа од динамички алоцирани низи од знаци)”.
Нешто вака: **lista ??
Дали треба да има два пати:
lista=new char[…] ??
Значи кога ќе рече динамички алоцирана меморија/ објект се мисли на :
ImeNaKlasa * promenliva = new ImeNaKlasa;
На овој начин ти сам правиш еден нов објект динамички, кога сакаш можеш да го избришеш.
А кога ќе рече : динамички алоцирана низа од објекти значи ова :
ImeNaKlasa * promenliva = new ImeNaKlasa[Broj_na_elementi];
Буквално се е исто, само што во првиот случај имаш еден објект. а во вториот имаш низа од објекти.
Исто како низа од знаци нели пр ако сакаш да го имаш шестиот знак пишуваш вака : randomPromenliva[5]......исто е и со објект само што место шестиот знак ќе имаш пристап до шестиот објект, и после со тој објект можеш да правиш било што сакаш.
--- надополнето: 1 септември 2012 во 20:04 ---
Едит:
Сега видов и една грешка што многу ги нервира асистентите.
Немој да мешаш низа од ЗНАЦИ со низа од БИЛО ШТО ( цели броеви, објекти, итн ).
За низа од знаци важи библиотеката cstring,,,и функциите strlen, strcpy, strcmp итн..овие можеш да ги користиш само за низи од ЗНАЦИ.
А ако ти реќе како погоре динамичка алоцирана низа од ОБЈЕКТИ, или листа од ОБЈЕКИ да не те буни и да користиш strcpy, strlen итн...многу ги нервира и толку не ни сакаат да прегледуваат повеќе.
Има доста работи за објаснување во целиот код, покасно ќе пишам и за другите функции се разбира додека некој друг не превземе
