ninja1234 Temat założony przez niniejszego użytkownika |
Klasy ,przyjaźń ,dziedziczenie » 2016-06-12 22:13:39 Witam ,mam problem z przesłaniem wartości do klasy długość,użyłem przyjaźni żeby móc dojść się do pól prywatnych klasy bazowej, niestety coś jest nie tak. #include <iostream> #include <math.h> using namespace std;
class Punkt { float x, y; public: Punkt() { x = 0; y = 0; } Punkt( float _x, float _y ) { x = _x; y = _y; } void ustaw2D(); void wypisz2D(); void przesun2D( float przesuniecie_x, float przesuniecie_y ); friend class Wektor; friend float punx( Punkt & ); friend float puny( Punkt & ); };
class Punkt3D : public Punkt { float x3d, y3d, z3d; public: Punkt3D() { x3d = 0; y3d = 0; z3d = 0; } Punkt3D( float _x3d, float _y3d, float _z3d ) : Punkt( x3d, y3d ) { x3d = _x3d; y3d = _y3d; z3d = _z3d; } void ustaw(); void wypisz(); void przesun3D( float przesuniecie_x, float przesuniecie_y, float przesuniecie_z ); friend class Wektor3D; friend float punx3d( Punkt3D & ); friend float puny3d( Punkt3D & ); };
class Wektor : public Punkt { public: Wektor() : Punkt() { } float punx( Punkt & p ); float puny( Punkt & p ); };
class Wektor3D : public Punkt3D { public: Wektor3D() : Punkt3D() { } float punx3d( Punkt3D & p3 ); float puny3d( Punkt3D & p3 ); };
float Wektor::punx( Punkt & p ) { return p.x; } float Wektor::puny( Punkt & p ) { return p.y; } float Wektor3D::punx3d( Punkt3D & p3 ) { return p3.x3d; } float Wektor3D::puny3d( Punkt3D & p3 ) { return p3.y3d; }
class Dlugosc : public Wektor , Wektor3D { float a, b, c, d, p; public: Dlugosc() : Wektor() , Wektor3D() { }; float dlugosc() { Wektor e; Wektor3D f; a = Wektor::punx( e ); b = Wektor::puny( e ); c = Wektor3D::puny3d( f ); d = Wektor3D::puny3d( f ); return sqrt(( a - c ) *( a - c ) +( b - d ) *( b - d ) ); } };
|
|
carlosmay |
» 2016-06-12 22:33:01 class Dlugosc : public Wektor , Wektor3D |
Proponuje zacząć od początku i używać debuggera. |
|
darko202 |
» 2016-06-13 14:14:13 Widać, że są to Twoje początki z klasami pomyśl nad konsekwencjami tworzenia klas nadrzędnych ogólnie
1. klasa Punkt { x, y rysuj() wyswietl() }
klasa Punkt3D: Punkt( { z rysuj() wyswietl() }
2. jak cos jest publiczne to po co metoda zwracajaca publiczna dostepna informacje np.powinno byc mozliwe wektor3D.A.x
3. ale w wektor brakuje Ci punktu A, B bo dziedziczenie z Punkt jest w tym wypadku pomylka
powinno byc klasa Wektor { public: Punkt A, B; }
klasa Wektor3D: Wektor { public: Punkt C; }
ewentualnie poszukaj i zrozum jak powinna wyglądać klasa Punkt, Wektor na przykładzie klasy Figury https://forum.4programmers.net/C_i_C++/180132-klasa_punkt_i_jej_pozniejsze_wykorzystanie |
|
ninja1234 Temat założony przez niniejszego użytkownika |
» 2016-06-13 20:15:33 ok ,ale funkcje zwracające miały być do pól prywatnych ,a nie protected. Poza tym dzięki za rozjaśnienie. |
|
ninja1234 Temat założony przez niniejszego użytkownika |
» 2016-06-13 22:38:21 przy zastosowaniu konwersji w góre wszystko śmiga class Wektor { public: float a, b; Punkt A, B; void wypisz2D(); void ustaw2D(); void przesun2D( float przesuniecie_x, float przesuniecie_y ); };
class Wektor3D : public Wektor { public: float a1, b1; Punkt3D A, B; void wypisz2D(); void ustaw2D(); void przesun2D( float przesuniecie_x, float przesuniecie_y ); float dlugosc() { return sqrt(( a - a1 ) *( a - a1 ) +( b - b1 ) *( b - b1 ) ); } int main( int argv, char ** argc ) { float x, y, z; Punkt mojPunkt; Wektor * mojWektor; Punkt3D mojPunkt3D; Wektor3D mojWektor3D; mojWektor = & mojWektor3D; }; cout << endl; cout << "dlugosc wektora swobodnego:" << mojWektor3D.dlugosc(); };
|
|
« 1 » |