Pereiti prie turinio

C++ operatoriaus panaudojimas


Rekomenduojami pranešimai

Sveiki, uzduotyje reikia realizuoti(ir greciausiai panaudoti) bool operatoriu <. Kur galima ji panaudoti jei as apsiejau ir be jo?

bool AutoDuomenys::operator < (const AutoDuomenys &kitas){
return co2 < kitas.co2;
}

string SurastiMaziausia(Automobiliai *A1){
int min = numeric_limits<int>::max(); // didziausia reiksme
string model;
for(A1->Pradzia(); A1->Yra(); A1->Kitas()){
	AutoDuomenys au = A1->Imti();
	if(au.ImtiCo2() < min && au.ImtiKategorija() == 5){
		min = au.ImtiCo2();
		model = au.ImtiModeli();
	}
}
return model;
}

taip pat jei apsirasau objektus dinamiskai ar leidzia "programavimo kultura" juos istrinti main'e?

	Automobiliai *A1 = new Automobiliai();
Automobiliai *B1 = new Automobiliai();

delete A1;
delete B1;

P.S sios uzduoties fragmente reiktu panaudoti bool operatoriu.

post-90967-0-19379900-1398699432_thumb.jpg

Redagavo saltis77
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, uzduotyje reikia realizuoti(ir greciausiai panaudoti) bool operatoriu <. Kur galima ji panaudoti jei as apsiejau ir be jo?

bool AutoDuomenys::operator < (const AutoDuomenys &kitas){
return co2 < kitas.co2;
}

string SurastiMaziausia(Automobiliai *A1){
int min = numeric_limits<int>::max(); // didziausia reiksme
string model;
for(A1->Pradzia(); A1->Yra(); A1->Kitas()){
	AutoDuomenys au = A1->Imti();
	if(au.ImtiCo2() < min && au.ImtiKategorija() == 5){
		min = au.ImtiCo2();
		model = au.ImtiModeli();
	}
}
return model;
}

taip pat jei apsirasau objektus dinamiskai ar leidzia "programavimo kultura" juos istrinti main'e?

	Automobiliai *A1 = new Automobiliai();
Automobiliai *B1 = new Automobiliai();

delete A1;
delete B1;

P.S sios uzduoties fragmente reiktu panaudoti bool operatoriu.

 

  if(au.ImtiCo2() < min && au.ImtiKategorija() == 5){

Čia gali panaudoti bool operator<(int whatever):

 

if (au < min && something)

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip as ir maniau, bet as negaliu taip padaryti, nes min yra int tipo, o au yra klases tipo objektas :)

 

 

Kodėl negali?

class A
{
private:
       int m_someint;
public:
       A(int i) : m_someint(i) { } 
       bool operator<(int other_int)
       {   
               return m_someint < other_int;
       }   
};

int main(void)
{
       A a = A(3);
       if(a < 4) cout << "3 < 4\n"; // <- true
       return 0;
}

 

Šitas, kaip ir, veikia?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodėl negali?

class A
{
private:
       int m_someint;
public:
       A(int i) : m_someint(i) { } 
       bool operator<(int other_int)
       {   
               return m_someint < other_int;
       }   
};

int main(void)
{
       A a = A(3);
       if(a < 4) cout << "3 < 4\n"; // <- true
       return 0;
}

 

Šitas, kaip ir, veikia?

Bet kai as parasau

if(au < min && au.ImtiKategorija() == 5){
  ...
}

gaunu toki errora

IntelliSense: no operator "<" matches these operands

operand types are: AutoDuomenys < int

vadinasi negalima lyginti int su klases kintamuoju.
 bool AutoDuomenys::operator < (const AutoDuomenys &kitas){
       return anything < kitas.anything;
}

si koda as koreguoti negaliu(cia pavyzdine uzduotis ir duota toks palyginimo operatorius salygoje, tik jis nebuvo realizuotas).

Redagavo saltis77
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bet kai as parasau

if(au < min && au.ImtiKategorija() == 5){
  ...
}

gaunu toki errora

vadinasi negalima lyginti int su klases kintamuoju.

 bool AutoDuomenys::operator < (const AutoDuomenys &kitas){
       return anything < kitas.anything;
}

si koda as koreguoti negaliu(cia pavyzdine uzduotis ir duota toks palyginimo operatorius salygoje, tik jis nebuvo realizuotas).

Tai gal gali imest pilna uzduoti, o ne nuotrupas?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Trupuciuka pertvarkes koda panaudojau operatoriaus uzklojima. Butu idomu paziureti tavo atveji, kaip jis veiktu, nes yra gerai zinoti daugiau nei viena sprendimo buda :)

string SurastiMaziausia(Automobiliai *A1){
AutoDuomenys min;
min.DetiCo2(numeric_limits<int>::max());
string model;
for(A1->Pradzia(); A1->Yra(); A1->Kitas()){
	AutoDuomenys au = A1->Imti();
	if(au < min && au.ImtiKategorija() == 5){
		min.DetiCo2(au.ImtiCo2());
		model = au.ImtiModeli();
	}
}
return model;
}

Redagavo saltis77
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...