[Delphi] Obiekt przez wartosc czy referencje?

0

Witam
w c++, javie i innych jezykach wystepuje problem z przekazywaniem obiektow przez wartosc lub przez referencje. Czy w delphi wystepuje taki podzial?

zalozmy ze mamy taki przyklad:

type
  TMojaKlasa = class
    Nazwa: string;
    procedure JakasProcedura(x: integer);
    constructor Create; 
    destructor Destroy;
  end;

{...}

  procedure WykonajOperacje(Obiekt: TMojaKlasa)
  begin
    Obiekt.Nazwa := 'Nowa Nazwa';
  end;

var
  ob: TMojaKlasa;

begin
  ob := TMojaKlasa.Create;
  ob.nazwa := 'Stara Nazwa';
  WykonajOperacje(ob);
  showmessage(ob.nazwa);
  // tu pojawi sie okienko z wartoscia nadana wewnatrz procedury: 'Nowa Nazwa'
end;

W tym wypadku (wg mnie) przekazuje obiekt przez referencje (przez wskaznik) i zmiany dokonywane
na obiekcie wewnatrz procedury wykonuja sie na przekazanym obiekcie a nie na jego kopii.

Czy da sie zrobic w Delphi przekazywanie obiektu przez wartosc?
wydaje mi sie ze potrzebne by byly do tego konstruktory kopiujace ktore jako takie chyba nie wystepuja w Delphi... (jesli sie myle to mnie poprawcie)

Czy moglby ktos pokazac mi przyklad (W DELPHI) w ktorym korzystne by bylo przekazanie obiektu przez wartosc (utworzenie kopji obiektu na potrzeby procedury)

0

jeśli w innych językach występuje taki problem, to dlaczego miałby nie występować w delphi? nie rozumiesz na czym polega, czy jak?
więc... nie możesz. obiekt może zawierać inne obiekty - co wtedy skopiujesz? referencje do obiektów innego obiektu, czy będziesz kopiować wgłąb? jeśli to drugie, to jak głęboko? jak skopiujesz obiekty, które nie obsługują Assign(), do których pól prywatnych nie masz dostępu i nie masz dostępu do źródeł?
co najwyżej możesz utworzyć drugi obiekt i użyć Assign(), zresztą obczaj http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21141107.html
nie możesz podać parametru w taki sposób, żeby podany obiekt został skopiowany, bo obiekt w Delphi to zawsze wskaźnik.

kopiowanie na ślepo obiektów jest bez sensu. nadpisz assign i skopiuj tylko niezbędne pola.

0

Assingn to analogia do opera przypisania znanego z c++.

Konstruktory mogą mieć parametry więc i konstruktor kopiujący można stworzyć.

Delphi nie pozwala na kopiowanie obiektów przez wartość. I dobrze. Jest wyraźny podział na klasy i struktury (rekordy). Pierwsze zawsze przez referencję, te drugie zawsze przez wartość.

0

No i wlasnie o to mi chodzilo.
zawsze i wszedzie przekazuje obiekty przez wskazniki i troche nie rozumialem co ludzie nie znajacy delphi do mnie rozmawiali. (od jakiegos czasu rozumiem ale chcialem sie upewnic)

Czy zatem jest jakis sens tworzenia kopii obiektu?
(ja widze zastosowanie tylko w przypadku wielowatkowosci)

Nie wiem wiec pytam. Wiec nie odpisujcie jakichs glupot tylko mi to wyjasnijcie. dzieki
(zeby nie bylo watpliwosci: wiem na czym polega glebokie i plytkie kopiowanie obiektow)

0

na zdrowy rozsądek... głęboka - kopia każdego z elementów obiektu, każdego z elementów jego elementów itp.
płytka - kopia tylko tych elementów obiektu, które nie są obiektami.

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