Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 13:40

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekt nur als Referenz übergeben
BeitragVerfasst: Sa Jan 08, 2011 12:32 
Offline
DGL Member

Registriert: Sa Jan 08, 2011 01:28
Beiträge: 3
gerade hier angemeldet hab ich schon ne Frage:

Ich hab ein Objekt vom Typ T3DObjekt, was in meiner 3D Welt einzigartig sein soll, und ein Objekt vom Typ T3DModell, welches die 3D Daten lädt und anzeigt. Da es sinnlos ist wenn man mehrer 3D Modelle der gleichen Art braucht die Daten mehrmals zu laden, soll jedes T3DObjekt nur eine Referenz auf ein 3DModell haben. Bis jetzt hab ich es so gelöst, ich weiß nur nicht ob das Modell jetzt kopiert wird oder nur die Referenz übergeben :
Code:
unit mT3DObjekt;

T3DObjekt = class (TObject)

private
  m3DModell : T3DModell;
  Position : TKoordinate;
  Rotation : TRotation;
public
  constructor Create;
  destructor Destroy; Override;
  procedure Draw;
  procedure Set3DModell(const a3DModell : T3DModell );
end;

constructor T3DObjekt.Create;
begin
  inherited Create;
end;

destructor T3DObjekt.Destroy;
begin
  inherited destroy;
end;

procedure T3DObjekt.Draw;
begin
  m3DModell.Draw(position.X,position.y,position.Z,rotation.Alpha,rotation.Beta,rotation.Gamma,true);
end;

procedure T3DObjekt.Set3DModell(const a3DModell : T3DModell );
begin
  m3dmodell:=a3dmodell;
end;
end;

Der Aufruf:

unit Unit1;

my3dmodell:=t3dmodell.Create(extractfiledir(ExpandFileName(ParamStr(0)))+
                             '\bottle\bottle.i3D');

my3dobjekt:=t3dobjekt.Create;
my3dobjekt.Set3DModell(my3dmodell);



Wie könnte man dies mit Pointern lösen oder ist dies garnicht mehr nötig, weil sowie so nur die Objektreferenz übergeben wird.

Vielen Dank , car fan


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 08, 2011 13:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Ich denke du meinst diesen Abschnitt:
Code:
procedure T3DObjekt.Set3DModell(const a3DModell : T3DModell );
begin
  m3dmodell:=a3dmodell;
end;
end;

Delphi sieht Klasseninstanzen als Pointer, also wird das Objekt nicht kopiert. Das heißt KlassenInstanz=Pointer, bei Records geht das allerdings nicht so einfach, da Delphi diese selber erstellt und löscht, dort wird der Inhalt kopiert.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 08, 2011 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, wird eindeutig nur als Referenz behandelt. Generell werden Objekte immer als Referenzen übergeben, kopiert und sonstwas. Wenn man ein Objekt klonen will, muss man dies Manuell tun. Viele RTL-Klassen vereinfachen dies über die Methode Assign (die zuerst in TPersistent definiert wird).

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.006s | 15 Queries | GZIP : On ]