Titlul: clase Scris de: Witsel Andrei din Decembrie 13, 2014, 12:30:57 de ce imi afiseaza valorile in ordinea inversa a obiectelor apelate?? adica eu ma asteptat sa imi afiseze ceva de genul
width=2 height=4 width=6 height=8 width=1 height=2 width=2 height=1 Asta se intampla doar daca apelez din cout, daca nu imi afiseaza in ordinea lor normala. imi poate spune cineva de ce se intampla asta?? P.S: Scuze, dar nu stiu cum sa atasez tip code asa ca pentru cei care nu vor sa download-eze un fisier am copiat aici programul.. #include <iostream> using namespace std; int i; class Rectangle { int width,height; public: Rectangle (int a,int b) { width=a; height=b; } Rectangle () { int x,y; cout<<" width= ";cin>>x; cout<<" height= ";cin>>y; cout<<"\n"; width=x; height=y; } Rectangle (int x) {width=x; height=1;} int area() { cout<<" width= "<<width; cout<<" height= "<<height; cout<<" i= "<<++i; cout<<" \n"; return width*height; } void set_values(int x,int y) {width=2*x; height=2*y;} void set_values1() {set_values(width,height);} }rect,rectb; int main() { rectb.set_values1(); rect.set_values1(); Rectangle rectd(2),rectc(1,2); cout<<rect.area()<<" "<<rectb.area()<<" "<<rectc.area()<<" "<<rectd.area(); return 0; } Titlul: Răspuns: clase Scris de: Robert Badea din Decembrie 13, 2014, 23:45:07 Ceea ce ai scris tu acolo în C++ este undefined behaviour.
>> și << sunt operatori, iar în C++ nu există conceptul de evaluare de la dreapta la stânga sau de la stânga la dreapta, deci mai clar nu există conceptul de ordinea evaluării. A nu se confunda cu asociativitatea operatorilor de la stânga la dreapta sau de la dreapta la stânga. f() + g() + h() se evaluează ca (f() + g()) + h(), dar h() s-ar putea să fie funcția evaluată prima, și abia după să se treacă la paranteză. În altă ordine de idei, când programezi cu side effects, încearcă să nu apelezi două funcții în aceeași expresie, mai ales dacă este importantă ordinea în care ele sunt apelate. Uite un exemplu. Eu când compilez cu g++-4.9, codul Cod: int i = 0; Un alt exemplu interesant. Cod: int i = 0; Cod: int i = 0; Titlul: Răspuns: clase Scris de: Witsel Andrei din Decembrie 14, 2014, 10:49:19 am inteles, mersi pentru explicatie
Titlul: Răspuns: clase Scris de: costin cosmin din Decembrie 19, 2014, 15:51:32 buna ziua,
scuzati daca am gresit topicul :) am o problema la crearea unei clase cu urmatoarele componente si ma intrebam daca ma puteti ajuta la sursa codului : • constanta PI • constructorul care acceptă două valori întregi, operand1 şi operand2 • metoda pentru scrierea valorilor operand1 şi operand2 • metodele pentru cele patru operaţii de calcul - adunare, scădere, împărţire şi înmulţire care vor returna rezultatul operaţiei asupra valorilor operand1 şi operand2 • metode statice pentru aceste operaţii, care acceptă operanzii drept parametri • metoda suprafaţa cercului care calculează suprafaţa cercului cu diametrul operand1. Creați o aplicaţie de consolă care instanţiază obiectul clasei Calculator, apelează toate metodele şi scrie rezultatul calculului. |