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

Problem z działaniem programu opartego na przyjaźni klas

Ostatnio zmodyfikowano 2017-10-22 00:08
Autor Wiadomość
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.
C/C++
#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:
    /* kontruktory */
    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;
   
    //p1.x()=1; p1.y()=10; p1.x()=100;
    cout << p1.x() << '\t' << p1.y() << '\t' << p1.z() << endl;
    //...
    /*prostokat pr1, pr2(1,2,3,10.5, 20.5);
        const prostokat pr3(p2,5,5);
        cout << pr3.x() << '\t' << pr3.y() << '\t' << pr3.z() << '\n'  << pr3.a() << '\t' << pr3.b()<< '\n' << pr3.pole() << endl;
        pr1.x()=2; pr1.y()=20; pr1.x()=200; pr1.a()= 10; pr1.b()=10;
        cout << pr1.x() << '\t' << pr1.y() << '\t' << pr1.z() << '\n'  << pr1.a() << '\t' << pr1.b()<< '\n' << pr1.pole() << endl;
        //...
        graniastoslup g1, g2(1,2,3,10.5,20.5,30.5), g3(p2,100,200,300);
        const graniastoslup g4(pr3,5);
        cout << g4.x() << '\t' << g4.y() << '\t' << g4.z() << '\n'  << g4.a() << '\t' << g4.b() << '\t' << g4.h() << '\n' << g4.objetosc() << endl;
   
        g1.a()=10; g1.b()=10; g1.h()=10;
        cout << g1.x() << '\t' << g1.y() << '\t' << g1.z() << '\n' << g1.a() << '\t' << g1.b() << '\t' << g1.h() << '\n' << g1.objetosc() << 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
P-165948
Chowan
» 2017-10-21 23:16:37
metody klasy
C/C++
void setX( float x ) { ox = x; }
void setY( float x ) { oy = x; }
void setZ( float x ) { oz = x; }
w linijce 95 zmiana na
C/C++
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.
P-165949
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
C/C++
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?
P-165950
Chowan
» 2017-10-21 23:27:08
C/C++
float & x()
{
    return ox;
}

float & y()
{
    return oy;
}

float & z()
{
    return oz;
}
z referencja mi dziala.
P-165951
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!!!
P-165953
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
P-165954
« 1 »
  Strona 1 z 1