Nowe posty

Autor Wątek: [C++] odwolanie sie do funkcji z innej klasy  (Przeczytany 3237 razy)

kordi

  • Gość
[C++] odwolanie sie do funkcji z innej klasy
« dnia: 2013-03-20, 20:01:52 »
Witajcie!
Wlasnie rozpoczelam nauke programowania obiektowego.
Napisalma klase, ktora mnozy ple trojkata.
A teraz chcialabym napisac druga klase, ktora odwoluje sie do funkcji z poprzedniej klasy i oblicza objetosc prosopadloscianu.

#include 
using namespace  std;

class Prostokat
{
        private:
          int x,y,z;

        public:
          void dane (int, int);
          int pole(void) {return x*y;}
          int pole2(int, int);

};

void Prostokat:: dane(int a,int b)
{
        x=a;
        y=b;
}

int Prostokat:: pole2(int a,int b)
{
        x=a;
        y=b;
    return x*y;
}

class Prostopadloscian
{        
        private:
          int m,n,h;
        public:        
          void dane(int,int,int);
          int obj(void) {return Prostokat.pole2(m,n) * h;}
};        
         
void Prostopadloscian:: dane(int a, int b, int c)
{
        m=a;
        n=b;
        c=h;
}


int main()
{
        Prostokat a,b;
        a.dane(2,4);

        cout<        cout<<"Pole prostokata a= "<
      Prostopadloscian A;
       cout<}
Niestety program sie sypie juz na linijce:
 int obj(void) {return Prostokat.pole2(m,n) * h;}
Tzn. 'Prostokat' nie odnosi sie do wartosci.
Czy moglibyscie mi wskazac, jak poprawnie powinnam sie odwolac do funcji z innej klasy?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
[C++] odwolanie sie do funkcji z innej klasy
« Odpowiedź #1 dnia: 2013-03-20, 22:04:59 »
#include 
using namespace std;

class Prostokat
{
private:
    int x,y;
public:
    Prostokat(int, int); // Skoro obiektowosc, to przyda sie uzyc konstruktora
    int pole(void) {return x*y;}
    static int pole(int, int); // Po co to? Moze chodziło Ci o static?
};

Prostokat:: Prostokat(int a,int b)
{
    x=a;
    y=b;
}

int Prostokat:: pole(int a,int b)
{
    return a*b;
}

class Prostopadloscian
{
private:
    int m,n,h;
public:
    Prostopadloscian(int,int,int); // Skoro obiektowosc, to przyda sie uzyc konstruktora
    int obj(void) {return Prostokat::pole(m,n) * h;} // metoda statyczna
    int obj2(void) {return Prostokat(m,n).pole() * h;} // albo metoda na obiekcie
};

Prostopadloscian::Prostopadloscian(int a, int b, int c)
{
    m=a;
    n=b;
    h=c; // to mialas odwrocone w swoim kodzie
         // dlatego warto zapisac definicje konstruktora w ten sposob:
         // Prostopadloscian::Prostopadloscian(int a, int b, int c) : m(a), n(b), h(c) {}
         // wtedy nie da sie popelnic tego bledu
}

int main()
{
    Prostokat a(2,4);
    cout << "Pole prostokata a = " << a.pole() << '\\n';

    cout << Prostokat::pole(4,4) << '\\n'; // medotda statyczna
    cout << a.pole(10,10) << '\\n'; // na obiekcie tez mozna zawolac metode statyczna

    Prostopadloscian A(5,3,4);
    cout << A.obj() << '\\n';
    cout << A.obj2() << '\\n';
}

kordi

  • Gość
[C++] odwolanie sie do funkcji z innej klasy
« Odpowiedź #2 dnia: 2013-03-21, 00:40:36 »
Jestem niezmiernie wdzieczna za pomc. Z tego przykladu b. duzo sie nauczylam. :)