Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasy ,przyjaźń ,dziedziczenie

Ostatnio zmodyfikowano 2016-06-13 22:38
Autor Wiadomość
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.
C/C++
#include <iostream>
#include <math.h>
using namespace std;

class Punkt { //klasa bazowa
   
   
    float x, y;
public:
   
    Punkt() {
        x = 0;
        y = 0;
    }
    Punkt( float _x, float _y ) { //konstruktor
        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
{ //klasa dziedziczona
   
    float x3d, y3d, z3d;
   
public:
    Punkt3D() {
        x3d = 0;
        y3d = 0;
        z3d = 0;
    }
   
    Punkt3D( float _x3d, float _y3d, float _z3d )
        : Punkt( x3d, y3d )
    {
        //konstruktor
       
        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 ) );
    }
   
};
P-149075
carlosmay
» 2016-06-12 22:33:01
C/C++
class Dlugosc
    : public Wektor // public
     , Wektor3D // private



Proponuje zacząć od początku i używać debuggera.
P-149076
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
C/C++
//bez dokładnej składni - sama idea do przemyslenia

1.
klasa Punkt
{
    x, y
    rysuj()
    wyswietl()
}

klasa Punkt3D: Punkt(
{
    z // x, y ma z Punktu przez dziedziczenie
    rysuj() // rozbudowa klasy bazowej o z, a jesli nie potrzeba to nie ruszamy  x, y
    wyswietl() // rozbudowa klasy bazowej o z (jak wyżej o x,y)
}

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; //A, B masz z dziedziczenia
}

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
P-149101
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.
P-149113
ninja1234
Temat założony przez niniejszego użytkownika
» 2016-06-13 22:38:21
przy zastosowaniu konwersji w góre wszystko śmiga
C/C++
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();
   
};
P-149120
« 1 »
  Strona 1 z 1