Deklaracje przyjazni - wypisywanie

0

Wg te regułki:

Jeżeli klasa M deklaruje przyjazn z klasa K to oznacza, ze wszystkie funkcje składowe klasy K maja dostep do prywatnych lub chronionych skladnikow klasy M.

Tak więc mam kod:

 #include <iostream>
using namespace std;
class figury;
class dane
{
    int bokA,bokB, pole;
    friend class figury;
};

class figury
{
  public:
  void obliczPoleKwadratu(int A)
  {
      dane kwadrat;
      kwadrat.bokA = A;
      kwadrat.pole = A*A;
      cout << "Pole kwadratu dla podanych przez Ciebie parametrow to: " << kwadrat.pole << endl;

  }

  void obliczPoleProstokata(int A,int B)
  {
      dane prostokat;
      prostokat.bokA = A;
      prostokat.bokB = B;
      prostokat.pole = A*B;
      cout << "Pole prostokata dla podanych przez Ciebie parametrow to: " << prostokat.pole << endl;

  }

 };

int main()
{
figury poleKwadratu, poleProstokata;
int co;
cout << "[1] Pole Kwadratu, [2] Pole Prostokata" << endl;
cout << "Podaj co chcesz wyliczyc: ";
cin >> co;

switch(co)
{
    case 1:
    int bokA;
    cout << "Podaj bok kwadratu: ";
    cin >> bokA;
    poleKwadratu.obliczPoleKwadratu(bokA);
    break;

    case 2:
    int bokJeden, bokDwa;
    cout << "Podaj krotszy bok prostokata: ";
    cin >> bokJeden;
    cout << "Podaj dluzszy bok prostokata: ";
    cin >> bokDwa;
    poleProstokata.obliczPoleProstokata(bokJeden,bokDwa);
    break;

    default:
    cout << "Zla wartosc!" << endl;
}

}

i chcę teraz aby metoda: wypisz() odpowiadała za wypisywanie danych na ekran. Niestety za chiny nie wiem jak ją zaimplementować. Próbowałem już chyba wszystkiego.... nie wiem jak napisać tę metodę aby wypisywała na ekran kwadrat.pole oraz prostokat.pole...

(tutaj jej nie napisałem bo mi nie działała)..

0

Jak chcesz wypisać wartości pól obiektów kwadrat i prostokat skoro są zadeklarowane lokalnie w metodach obliczPole...?

0

Czyli mam je zadeklarować...w klasie dane? Czy jak?

0

Twoja wola jak to zrobisz, byle byś miał dostęp do tych obiektów. Zapewne chcesz wywołać funkcję/metodę wypisz(), po obliczeniu obydwu pól figur, tak? To skoro chcesz tak zrobić te obiekty muszą istnieć jeszcze, a w tym momencie po zakończeniu metod obliczPole... obiekt przestaje istnieć. Możesz dać te obiekty do klasy figury i na nich robić operacje, a potem wywołać wypisz() w celu dostępu do tamtych obiektów.

0

Nie rozumiem.... ?:P Przecież są w klasie figury. Mam tam wywołać funkcje wypisz? A to oznacza, ze musze jej zrobic deklaracje wstepna.

0

No to co, że są w klasie figury, ale wraz z zakończeniem tych metod przestają istnieć. Nie wiem gdzie chcesz wywołać tą metodę/funkcję wypisz.

0

no to pytam Cię jak to zrobić....;) mam w funkcji wywolać funkcje?

0
Dr Zielu napisał(a)

no to pytam Cię jak to zrobić....;) mam w funkcji wywolać funkcje?

wiesz co to zasięg zmiennych? Może zacznij od tego, a nie od razu do obiektowego programowania się zabierasz :]

0

Zielu wytłumacz mi dokładnie co chcesz zrobić to ci poprawię kod żeby działało, ale dalej nie wiem co dokładnie chcesz zrobić.

0

Jak widać mam metody, które obliczają pole kwadratu i prostokąta.
Ok.
W nich mogę wpisać np:

 cout << "pole to: " << prostokat.pole << endl; 

i wyświetli mi to pole kiedy w funkcji main wywołam to tak:

poleProstokata.obliczPoleProstoka(bokA);

a ja chcę stworzyć metodę wypisz(), która zajmie tym wypisywaniem wyników z obliczPoleProstoka

Tylko, że mi ta metoda nie działa...jak bym jej nie napisał.... :(
Rozumiesz?
Jedna metoda liczy pole, druga wypisuje i zależy mi, żeby była deklaracja przyjaźni...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0