[C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüberl.
Guten abend. Ich versuche gerade eine einfache Matrix-Klasse in C++ zu implementieren. Dabei möchte ich zunächst einige statische Methoden schreiben, die Objekte auf bestimmte ARt und Weise erzeugen, initialisieren und zurückgeben. Das ganze soll, falls das möglich ist, mit den &-Referenzen geschehen, da man dann beim Zugriff ja nicht zwischen Zeiger und dem eigentlichen Objekt unterscheiden muss.
Ich könnte auch damit leben, die Objekte per Zeiger anzusprechen. Dort taucht aber das Problem auf, dass ich für den Zugriff auf die Elemente der Matrix den ()-Operator überladen habe und das aber nicht bei Zeigern funktioniert (zumindest weiß ich nicht wie). Lange Rede, kurzer Sinn: Ich habe bisher nur Tutorials gefunden, in denen diese Probleme tangiert werden, aber keins, welches sich speziell mit meiner Problematik beschäftigt. Falls jemand also so etwas kennt, wäre es sehr nett, den Link hier zu posten ;) Was in dem Tutorial u.a. erklärt werden sollte ist, wie man folgenden Delphi-Code in C++ unter Verwendung von Referenzen ausdrückt:
Delphi-Quellcode:
class TBlabla
public class function GetSpecialObject(type: Integer): TBlaBla; end; function TBlabla.GetSpecialObject(type: Integer): TBlaBla; begin //hier irgendein Objekt erstellen oder auch ein vorhandes nehmen //z.B. Result := TBlabla.Create(-1, 1, type); end; |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Zitat:
However, folgendes sollte zumindest kompilieren:
Code:
Ungetestet, ich weiß also nicht, ob er soetwas schluckt, aber auf jeden Fall das delete nicht vergessen ;-)
class CSomeClass
{ public: static CSomeClass& GetSpecialObject(type: int); }; CSomeClass& CSomeClass::GetSpecialObject(type: int) { CSomeClass *temp = new CSomeClass(parameters, for, constructor); return (*temp); } Schlecht ist es IMHO trotzdem ;-) |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Eine Matrixklasse habe ich schonmal geschrieben. Muß sie nur mal raussuchen. Evtl. wird's morgen, ansonsten erst am Freitag. |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Damit kann ich so auf ELemente meiner Matrix zugreifen:
Code:
Was aber halt nicht geht ist sowas:
Matrix m(3);
m(0,1) := 56.45;
Code:
Und warum ist so eine statische Methode schlechter Stil? Konkret möchte ich das dafür einsetzen, Translations- oder Spiegelungsmatrizen zu erzeugen. Mit zwei, drei statischen Methoden dafür ist das wesentlich besser als wenn ich den Code dafür 100 mal ins Programm schreibe.
Matrix* m = new Matrix(3);
m(0,1) := 56.45; Und wollte ich ein Singleton verwenden, muss ich das ja so machen, oder? @Olli: Danke schon mal. |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Zitat:
|
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
|
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Referenzen sollte man da benutzen, wo sie sinnvoll sind. Das ist der Punkt.
Könntest du vielleicht erstmal spezifizieren welche Operatoren du mit welcher Funktion überladen willst und welche Operationen auf Matrizen du überhaupt haben willst? Ich kann nur das Buch von Buzzi-Ferraris "Scientific C++" empfehlen. Mag zwar etwas älter sein, ist aber hervorragend geeignet. |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Code:
geht immer noch nicht?
Matrix* m = new Matrix(3);
(*m)(0,1) = 56.45; Zitat:
Edit: Wieso ist da eigentlich immer jemand schneller als ich? Und warum kommt nie der rote Kasten? Und überhaupt, warum merke ich das immer erst 10 Minuten später? Fragen über Fragen... aber 42 kann's diesmal nicht sein... |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Liste der Anhänge anzeigen (Anzahl: 1)
War doch nur eine Vektorklasse, obwohl ich meine, ich hätte schon eine eigene Matrixklasse implementiert - aber die finde ich aktuell nicht. Vektorklasse siehe Anhang.
Ansonsten zu allen Fragen: http://www.parashift.com/c++-faq-lite/ "Scientific C++: Building Numerical Libraries the Object-Oriented Way" von Guido Buzzi-Ferraris (Addison-Wesley). ISBN 0-201-63192-X |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Die (*m)(0,1) - Variante geht, ist aber hässlich. Naja, aber ist akzeptabel im Notfall. Zitat:
Ack. Ich hatte dich so verstanden, dass es generell schlechter Stil sei, dass eine statische Methode Objekte zurückliefert, sei es als referenz, als Zeiger oder als was-auch-immer. Naja, so wies aussieht, werd ich mich damit abfinden, den Zeiger manuell zu derefenzieren. Danke aber für die Literatur und die Vektor-Klasse, Olli. Operatoren, die ich überladen möchte, sind halt dieser Subscript-Operator und Operatoren zum Multiplizieren. Ob ich sonst noch was brauch, weiß ich noch nicht. Aber auf jeden Fall großen Dank schon mal. |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Ist aber nicht OpenSource und nicht für kommerzielle Nutzung, lt. Autor. Hatte ihn im letzten Jahr gefragt. |
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Ich lads mir gerade runter. Kommerziell nutzen will ich das ganze ohnehin nicht, auch will ich meine Klasse selbst implementieren, da sie akademischen Zwecken dient (Graphische-Systeme-Projekt).
|
Re: [C++] Tutorial für mit Zeiger vs. Referenzen, Operatorüb
Zitat:
Zitat:
Im Ernst, vielleicht geht es auch mit *m(0,1), ich kenne die Precedence-Tabelle nicht auswendig und deinen komischen subirgendwas-Operator kannte ich vorher auch noch nicht (zumidnest nicht in der Form mit runden Klammern, die ich aber sehr interessant finde ;-)). Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz