Forum » Programiranje » [c++] naslov objekta kot argument funkcije
[c++] naslov objekta kot argument funkcije
killa bee ::
#include <iostream> using namespace std; class employee{ int salary; public: employee(int e) : salary(e){} int get_salary(){ return salary; } }; bool compare_salary(employee &e1, employee &e2){ if (e1.get_salary() >= e2.get_salary()) return true; else false; } int main(){ employee J1(150), J2(190); if (compare_salary(J1, J2)) { // zakaj ne if (compare_salary(&J1, &J2)) cout << "J1 smaller than J2" << endl; } else { cout << "J1 bigger or equal than J2" << endl; } cin.clear(); cin.ignore(1000, '\n'); cout << "Press any key to continue..."; cin.get(); return 0; }
killa bee ::
ne razumem ta code snippet
/** Compares salaries which are inside Employee class */ bool compare_salary(Employee &e1, Employee &e2){ if (e1.get_salary() < e2.get_salary()) return true; else false; } /** Gets the position of the smallest element in a vector range. @param a the vector @param from the beginning of the range @param to the end of the range @return the position of the smallest element in the range a[from]...a[to] */ int min_position(vector<Employee*>& a, int from, int to) { int min_pos = from; int i; for (i = from + 1; i <= to; i++){ cout << compare_salary(*a[i], *a[min_pos]) << " "; // Output: 10 20 30 40 20 30 1 30 1 1 ->F-ja compare_salary bi morala vrnit samo 0 ali 1 ?? if (compare_salary(*a[i], *a[min_pos])) min_pos = i; //a[i] < a[min_pos]) } return min_pos; }
Zgodovina sprememb…
- spremenilo: killa bee ()
Vesoljc ::
kaj ne razumes? compare vrne true/false. min_position gre pa cez array (od/do). zacne z "od" indexom potem pa ga primerja z naslednjimi. ce compare vrne true, postane "min_pos" (index ki kaze na vrednost v arrayu z trenutno najmanjso vrednostjo) trenutni i. ergo po koncu loopa dobis index v array, kjer je na dolocem odseku (od/do) najmanjsa vrednost.
kar se pa tice referenc; v c++ lahko parametre definiras na kvazi tri nacine:
po referenci in prek naslova sta si zelo podobna po internem delovanju. oba na stack dodata samo naslov/referenco od parametrov ki jih funkcija rabi, medtem ko prvi, po vrednosti, na stack SKOPIRA vse parametre ki jih funkcija rabi. to je prva bistvena razlika, druga pa je da ti referenca in pointer omogocata da spreminjas vrednosti parametrov, saj spreminjas dejanske objekte. vrednosti parametrov sicer lahko spreminjas tudi v prvem primeru, ampak ker je ta parameter KOPIJA na stacku, se originalna vrednost ne spreminja.
const keyword ti pa omogoca da kljub moznosti da vrednost popravljas, to eksplicino prepoves:
kar se pa tice referenc; v c++ lahko parametre definiras na kvazi tri nacine:
- po vrednosti: int sestej(int a, int b); - po referenci: int sestej(int& a, const int& b); - prek naslova: int sestej(int* a, int* b);
po referenci in prek naslova sta si zelo podobna po internem delovanju. oba na stack dodata samo naslov/referenco od parametrov ki jih funkcija rabi, medtem ko prvi, po vrednosti, na stack SKOPIRA vse parametre ki jih funkcija rabi. to je prva bistvena razlika, druga pa je da ti referenca in pointer omogocata da spreminjas vrednosti parametrov, saj spreminjas dejanske objekte. vrednosti parametrov sicer lahko spreminjas tudi v prvem primeru, ampak ker je ta parameter KOPIJA na stacku, se originalna vrednost ne spreminja.
const keyword ti pa omogoca da kljub moznosti da vrednost popravljas, to eksplicino prepoves:
int sestej(int& a, const int& b) { int rez = a + b; a = 10; // ok b = 10; // compile error return rez; }
Abnormal behavior of abnormal brain makes me normal...
killa bee ::
compare vrne true/false.compare ne vrne true ali false ampak // Output: 10 20 30 40 20 30 1 30 1 1
v bistvu me zanima kako lahko funkcija ki vrne false/true vrne naprimer 30?
funkcija comapare bi morala vrnit samo 0 ali 1 ne pa 10,20 itd.
Zgodovina sprememb…
- spremenilo: killa bee ()
sas084 ::
/** Compares salaries which are inside Employee class */ bool compare_salary(Employee &e1, Employee &e2){ if (e1.get_salary() < e2.get_salary()) return true; else false; }
V vrstici 7 ti manjka return. V tem primeru se "false" ne vrne iz funkcije. Rezultat klica (ponavad se ta vrednost prenaša preko EAX registra - za podrobnosti si pogledi calling conventions) je tako bilo katera vrednost, ki se nahaja v registru.
killa bee ::
aha, čudno da compiler ne javi napake ali opozorila
Zgodovina sprememb…
- spremenilo: killa bee ()
mn ::
killa bee ::
kako bi pa dal za vse bodoče projekte da bi imel warning level 4 ?
Pa še nekaj, če inicializiraš objekt na ta način
kako je ime temu objektu, ki ima naslov(v ramu) shranjen v v[1]?
Pa še nekaj, če inicializiraš objekt na ta način
v[1] = new Employee(150);
kako je ime temu objektu, ki ima naslov(v ramu) shranjen v v[1]?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL syntax napakaOddelek: Programiranje | 1609 (1100) | MrStein |
» | [c++]Problem z razrediOddelek: Programiranje | 3866 (3350) | mn |
» | [c#] Majhen problemčekOddelek: Programiranje | 1018 (826) | darkolord |
» | AdSense jo je stal nadomestila za brezposelnostOddelek: Novice / Omrežja / internet | 4843 (3475) | Dragi |
» | [Java] Sortiranje objektovOddelek: Programiranje | 2864 (2864) | tjaz24 |