/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Kopierer indhold fra et objekt til et ande~
Fra : Esben Piltoft


Dato : 04-06-03 06:37

Hvis man får brug for at kopierer alt indhold fra et objekt til at
andet, hvordan gør man så det ??
Er man så nødt til at kopierer alle data i et objekt hver for sig over
i det andet objekt ??
Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
det. Efterfølgende gange forsvinder indholdet i både objekt1 og
objekt2 – havde det virket havde det jo været det letteste.

Nogen der har et løsningsforslag ??

På forhånd tak (Esben)

//**** 8< Koden der giver mig grå hår 8< ********
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;

type
TTest = class
private
FmyStr: String;
public
function GetStr: string;
procedure SetStr(s: string);
end;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
myTest1: TTest;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
myTest1 := TTest.Create;
myTest1.SetStr('str1');
label1.Caption := myTest1.GetStr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
myTest2: TTest;
begin
myTest2 := TTest.Create;

myTest2 := myTest1;

label1.Caption := myTest1.GetStr;
label2.Caption := myTest2.GetStr;

myTest2.Free;
end;

procedure TTest.SetStr(s: string);
begin
FmyStr := s;
end;

function TTest.GetStr: string;
begin
result := FmyStr;
end;

end.
//**************

 
 
Klaus Petersen (04-06-2003)
Kommentar
Fra : Klaus Petersen


Dato : 04-06-03 08:58

> Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
> det.

Det er fordi objekt2 og objekt1 kun er pointere - dvs. de indeholder bare en
adresse til et objekt i hukommelsen - altså de indeholder ikke selve
objektet.

Når du sætter dem lig hinanden, sætter du objekt2's pointer til at være
objekt1's pointer og begge pointere kommer altså til at pege på samme
fysiske objekt.

Så når du sletter det fysike objekt, bliver begge pointere ugyldige.

Hvis du skal lave en kopi, bliver du nødt til at skabe et nyt objekt af
samme type og kopiere attributterne over i det nye objekt - det er muligt at
delphi har en smart ordning til dette formål, men jeg kender den ikke.



Thor (06-06-2003)
Kommentar
Fra : Thor


Dato : 06-06-03 07:10

Prøv a.assign(b);
-> kopierer indholdet af b over i a;

// Thomas

"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:bbk8qd$a4n$1@sunsite.dk...
> > Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
> > det.
>
> Det er fordi objekt2 og objekt1 kun er pointere - dvs. de indeholder bare
en
> adresse til et objekt i hukommelsen - altså de indeholder ikke selve
> objektet.
>
> Når du sætter dem lig hinanden, sætter du objekt2's pointer til at være
> objekt1's pointer og begge pointere kommer altså til at pege på samme
> fysiske objekt.
>
> Så når du sletter det fysike objekt, bliver begge pointere ugyldige.
>
> Hvis du skal lave en kopi, bliver du nødt til at skabe et nyt objekt af
> samme type og kopiere attributterne over i det nye objekt - det er muligt
at
> delphi har en smart ordning til dette formål, men jeg kender den ikke.
>
>



René Jensen (04-06-2003)
Kommentar
Fra : René Jensen


Dato : 04-06-03 19:34

Esben Piltoft wrote:
> Hvis man får brug for at kopierer alt indhold fra et objekt til at
> andet, hvordan gør man så det ??

Hvorfor ønsker du at kopiere et objekt til et andet objekt? -Kan det
ikke løses vha. en friend-klasse eller nedarvning?

Med venlig hilsen,
René Jensen


Esben Piltoft (05-06-2003)
Kommentar
Fra : Esben Piltoft


Dato : 05-06-03 08:21

> Hvorfor ønsker du at kopiere et objekt til et andet objekt? -Kan det
> ikke løses vha. en friend-klasse eller nedarvning?

Grunden er simpelthen at det ville være lettere end at flytte alt
indholdet (seperat) over i det objekt hvor det hører til. Der er op
til 80 objekter, der skal sorteres udfra nogle få af de data de
indeholder. Og da jeg gerne vil have at objekt0 altid skal tilhøre en
bestemt adresseområde (fx. 181 byte i en eeprom startende fra 0x13F0
og så fremdeles) vil der opstå situationer hvor en stor del af
objekterne skal rykkes en enkelt plads.

Men overvejer nu at lave et array af byte der kan holde styr på
placeringen af objekterne. Så skal jeg jo også bare flytte x*nogle få
bytes i stedet for x*181 bytes. Selvfølgelig kunne jeg i stedet flytte
de 181 bytes "manuelt", men det er næsten for let ;) og så have jeg
jo været færdig nu .... ;)

Problemet er også at det projekt jeg skriver klassen til ikke er
færdig endnu - og bliver løbende ændret. Kunne jeg kopiere en klasse
ville det minimere de ændringer jeg skulle lave i klassen (og kopi
funktionen) hver gang der bliver ændret på nogle bytes.

Esben

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409084
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste