Pytanie orientowe ; )

 
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> C/C++
Autor Wiadomość
bartek4833
~user




Dołączył: 04 Kwi 2008
Posty: 216


PostWysłany: 10-03-10 01:20 Zacytuj zaznaczone Odpowiedz z cytatem

Witamm

Mam problem z zad, a w zasdzie ze zrozumieniem pewnego fragmentu, jakby ktos by mi mogl pomoc byloby fajnie Wink Glownie chodzi o :

Mam stworzyc 2 klasy: Plytki i Sciana. Sciana ma korzystac z plytek. W tresci zad pisze ze klasa Plytki ma miec konstruktor kopiujacy (no ok), i w tresci zad podano tez:
Klasa Sciana ma pobierac jako parametr konstruktora parametrycznego obiekt klasy Plytki i kopiowac go do swojego prywatnego pola tego typu.

Co to dokladnie oznacza? W ogole po co mi ten konstruktor kopiujacy w klasie Plytki?
Jezeli czegos nie rozumiecie to prosze pytac Wink
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
progs
#Moderator




Dołączył: 16 Cze 2005
Posty: 6000
Skąd: 3m
Pomógł: 358

PostWysłany: 10-03-10 06:57 Zacytuj zaznaczone Odpowiedz z cytatem

Oznacza tylko tyle ze konstruktor klasy musi miec parametr klasy Plytki i zapamiatec go w polu klasy, czyli bardzo standardowa operacja z danymi przekazanymi w konstruktorze.
Konstruktor kopiujacy w klasie Plytki przyda sie wlasnie w konstruktorze klasy Sciana gdzie masz zrobic kopie parametru.

pozdro.


Użytkownik otrzymał punkt pomocy za ten post.

_________________
Programowac kazdy moze, tylko nie kazdy ma tyle cierpliwosci i zapalu zeby zajac sie tym na poważnie:)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora Numer GG Tlen
Filip.Wroc
~user




Dołączył: 15 Lis 2009
Posty: 172
Skąd: Wroclaw
Pomógł: 17

PostWysłany: 10-03-10 11:10 Zacytuj zaznaczone Odpowiedz z cytatem

Rozwazmy taka sytuacje:
Kod:
class Sciana
{
   Plytki plytki;
   public Sciana (Plytki p)
      {
      plytki=p;
      }

   public Plytki getPlytki()
   {return plytki;}
}

class Plytki
{
   private int ile_plytek;
   public Plytki (int n)
      {
      ile_plytek=n;
      }

   public Plytki(Plytki p)
      {
      this.ile_plytek=p.ile_plytek;
      }

   public void setIlosc(int x)
      {
      ile_plytek=x;
      }
   public int getIlosc()
      {return ile_plytek;}
}

Wtedy dzialanie takie:
Kod:
Plytki pl=new Plytki(10);
Sciana sc= new Sciana(pl);
pl.setIlosc(5);
System.out.println(sc.getPlytki().getIlosc());

da nam na ekranie 5 - to znaczy ze zmieniajac obiekt pl ktory juz nie powinien nalezec do sc zmieniamy tez obiekt w scianie (obiekt Sciany powinien miec wlasna kopie).
za to jezeli przepiszemy konstruktor w klasie sciana:
Kod:
public Sciana(Plytki p)
{
   plytki=new Plytki(p);
}

to wczesniejszy (przykladowy) kod wyswietli 10, czyli tak jak powinno sie dziac.

Dzieje sie to z tego powodu, ze w 1. przypadku pl i sc.getPlytki() wskazuja na to samo miejsce w pamieci. to tak jakby dom stal na skrzyzowaniu ulic i mial dwa adresy - nie wazne czy bedziesz szukal na jednej czy na drugiej - znajdziesz go.

w drugim przypadku, z konstruktorem kopiujacym, tworzysz identyczna (bo tak to zaimplementowalismy) kopie parametru i dopiero ja zapisujesz. dane sie zgadzaja (podczas konstrukcji obiektu) a wskazniki sa juz rozne, czyli nic nie wplynie na dane w klasie Sciana.


Użytkownik otrzymał punkt pomocy za ten post.

_________________
Filip z Wroclawia

NIGDY nie prosze o gotowce. Zawsze szukam wskazowek, rad, zrodel. Jezeli pisze, to znaczy ze sobie nie radze sam, pomimo wielu prob, poszukiwan zarowno w Google jak i na Wiki.
Zawsze chetnie pomoge, jezeli umiem i jezeli osoba pyta z sensem i chce pomocy a nie odwalenia za nia pracy (lub mi za to zaplaci, a wtedy przy odpowiedniej cenie moge pisac za nia cokolwiek Wink )
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
hobson
+Przyjaciel P-ZONE




Dołączył: 21 Gru 2006
Posty: 1574

Pomógł: 266

PostWysłany: 10-03-10 12:09 Zacytuj zaznaczone Odpowiedz z cytatem

Cytat:
Klasa Sciana ma pobierac jako parametr konstruktora parametrycznego obiekt klasy Plytki i kopiowac go do swojego prywatnego pola tego typu.

Jak to zrobić pokazał Filip w swojej definicji klasy Sciana.

bartek4833 napisał:
W ogole po co mi ten konstruktor kopiujacy w klasie Plytki?

Do tego by trzeba lepiej poznać zadania tej klasy - jest jednak spore prawdopodobieństwo, że jest on zupełnie niepotrzebny, tylko został na siłę wciśnięty abyś 'mógł sobie poćwiczyć'. Generalnie istnienie samodzielnie zdefiniowanego konstruktora kopiującego wymagane jest w przypadku, gdy obiekty tej klasy mają zarządzać jakimiś zasobami. Nie da się jednak tego określić, gdy nie znamy przeznaczenia, budowy, lub zadań tej klasy.


Użytkownik otrzymał punkt pomocy za ten post.

_________________
Pamiętaj o znacznikach [syntax="c++"] [/syntax]
Pamiętaj o interpunkcji i ortografii
---
Pomóz mi uczynić te teksty lepszymi:
std::vector Algorytmy standardowe Mój program uruchamia się i zaraz znika. Masz uwagi? pomysły na ulepszenie ich? napisz maila lub PW!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Numer GG
bartek4833
~user




Dołączył: 04 Kwi 2008
Posty: 216


PostWysłany: 11-03-10 01:22 Zacytuj zaznaczone Odpowiedz z cytatem

Dzieki za pomoc Wink
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> C/C++ Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

Mapa
Powered by phpBB © 2001, 2005 phpBB Group

 Polecane strony