Problem z działaniem programu opartego na przyjaźni klas
Ostatnio zmodyfikowano 2017-10-22 00:08
Pete12234 Temat założony przez niniejszego użytkownika |
Problem z działaniem programu opartego na przyjaźni klas » 2017-10-21 22:55:02 Siema :D Musze na pracę domową zrobić zadanie wykorzystujące przyjaźń i dziedziczenie klas i musze to dopasować do podanego przez wykładowcę "szkieletu". Poniżej znajduje się kod. #include<iostream> using namespace std;
class punkt { friend class prostokat; friend class graniastoslup; float ox, oy, oz; public: punkt( float a = 1, float b = 1, float c = 1 ) { ox = a; oy = b; oz = c; }; float x() { return ox; } float y() { return oy; } float z() { return oz; } };
class prostokat { int a; int b; punkt w1; punkt w2; public: prostokat( punkt wr, int a0 = 1, int b0 = 1 ) { w1 = wr; w2.ox = wr.ox + a0; w2.oy = wr.oy + b0; w2.oz = wr.oz; a = a0; b = b0; } prostokat( int p1, int p2, int p3, int a0, int b0 ) { w1.ox = p1; w1.oy = p2; w1.oz = p3; w2.oz = p1 + a0; w2.oy = p2 + b0; w2.oz = p3; a = a0; b = b0; } void wypisz() { cout << w1.ox << " " << w1.oy << " " << w1.oz << endl; cout << w2.ox << " " << w2.oy << " " << w2.oz << endl; cout << a << " " << b << endl; } };
class graniastoslup { prostokat podstawa; int h; };
int main() { punkt a( 1, 2, 3 ); prostokat pr1( a, 12, 13 ); pr1.wypisz(); punkt p1, p2( 1, 2, 3 ); const punkt p3( 1.1, 2.2, 3.3 ); cout << p3.x() << '\t' << p3.y() << '\t' << p3.z() << endl; cout << p1.x() << '\t' << p1.y() << '\t' << p1.z() << endl; return 0; }
Konkretnie interesują mnie tutaj linie 92 i 95. Co zrobić, aby utworzyć obiekt "stały", który będzie współpracował z użytkownikiem i nie wywalał błędów? :D Nie mogę też ogarnąć co tak właściwie robi się w linii 95. Jest tam wyświetlany poniższy błąd: lvalue required as left operand of assignment
Co mogę zrobić w implementacji klas aby to wszystko działało? Z góry dzięki za pomoc :D |
|
Chowan |
» 2017-10-21 23:16:37 metody klasy void setX( float x ) { ox = x; } void setY( float x ) { oy = x; } void setZ( float x ) { oz = x; }
w linijce 95 zmiana na p1.setX( 1 ); p1.setY( 10 ); p1.setZ( 100 );
u mnie wyrzuca błąd w linijce 93 bo punkt jest stały a metody nie, więc albo punkt p3 bez const albo metody z const. |
|
Pete12234 Temat założony przez niniejszego użytkownika |
» 2017-10-21 23:20:39 Znaczy tak, to jest ogarnięte przez funkcje w klasie punkt, ale dziwi mnie ten zapis p1.x() = 1; p1.y() = 10; p1.x() = 100;
Teoretycznie jest on błędny, ale czy istnieje możliwość, żeby go wykorzystać w te sposób? |
|
Chowan |
» 2017-10-21 23:27:08 float & x() { return ox; }
float & y() { return oy; }
float & z() { return oz; }
z referencja mi dziala. |
|
mateczek |
» 2017-10-22 00:05:54 jak napisał kolega wyżej referencje. Ja dodam tylko, że to nie ma sensu z punktami typu const!!! |
|
Pete12234 Temat założony przez niniejszego użytkownika |
» 2017-10-22 00:08:06 Też tak sądzę, ale są to wytyczne podane przez wykładowcę niestety :D Dzięki za sugestię z tą referencją, działa w 100% sprawnie :D |
|
« 1 » |