| Autor |
Wiadomość |
bartek4833 ~user
Dołączył: 04 Kwi 2008 Posty: 216
|
|
Witamm
Mam problem z zad, a w zasdzie ze zrozumieniem pewnego fragmentu, jakby ktos by mi mogl pomoc byloby fajnie 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 
|
|
| Powrót do góry |
|
|
progs #Moderator

Dołączył: 16 Cze 2005 Posty: 6000 Skąd: 3m Pomógł: 358
|
|
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 |
|
|
Filip.Wroc ~user
Dołączył: 15 Lis 2009 Posty: 172 Skąd: Wroclaw Pomógł: 17
|
|
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 ) |
|
| Powrót do góry |
|
|
hobson +Przyjaciel P-ZONE
Dołączył: 21 Gru 2006 Posty: 1574
Pomógł: 266
|
|
| 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 |
|
|
bartek4833 ~user
Dołączył: 04 Kwi 2008 Posty: 216
|
|
Dzieki za pomoc 
|
|
| Powrót do góry |
|
|
|
|
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
|
MapaPowered by phpBB © 2001, 2005 phpBB Group
|
|