» »

[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;
}

Randomness ::

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…

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 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…

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…

Vesoljc ::

kater compiler pa je?
Abnormal behavior of abnormal brain makes me normal...

killa bee ::

visual c++

Senitel ::

Saj to je warning:
Warning C4715: not all control paths return a value

mn ::

killa bee je izjavil:

visual c++


Project settings, Warning level 4. Prva stvar za nastaviti v vsakem VS projektu.

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
v[1] = new Employee(150);


kako je ime temu objektu, ki ima naslov(v ramu) shranjen v v[1]?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL syntax napaka

Oddelek: Programiranje
121609 (1100) MrStein
»

[c++]Problem z razredi

Oddelek: Programiranje
263866 (3350) mn
»

[c#] Majhen problemček

Oddelek: Programiranje
101018 (826) darkolord
»

AdSense jo je stal nadomestila za brezposelnost

Oddelek: Novice / Omrežja / internet
274843 (3475) Dragi
»

[Java] Sortiranje objektov

Oddelek: Programiranje
192864 (2864) tjaz24

Več podobnih tem