| Autor |
Nachricht |
pumuckl
Moderator
Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 7326
|
pumuckl Moderator
15:41:07 21.01.2009 Titel: |
|
Zitieren |
|
 |
pospiech
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.11.2006
Beiträge: 595
|
pospiech Mitglied
15:09:02 12.02.2009 Titel: |
|
Zitieren |
Ich würde das hier mit const schreiben, also statt
| C++: | | X operator+(X const& lhs, X const& rhs) | |
das hier
| C++: | | const X operator+(X const& lhs, X const& rhs) | |
Dann kann man nicht "(a+b)=c" schreiben. |
|
|
|
 |
icarus2
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1366
|
icarus2 Mitglied
23:35:23 06.05.2011 Titel: |
|
Zitieren |
*Edit
Sry, habe etwas in den falschen Thread kopiert. |
Zuletzt bearbeitet von icarus2 am 23:36:23 06.05.2011, insgesamt 1-mal bearbeitet |
|
 |
nuke1600
Unregistrierter
|
nuke1600 Unregistrierter
14:36:56 08.06.2012 Titel: |
Tip Top |
Zitieren |
Sehr guter Artikel.
Solltest du gewillt sein, an der ein oder anderen Stelle etwas ausführlicher zu werden, würde ich mich sehr darüber freuen.
Mir ist allerdings etwas aus deinem Beispiel aufgefallen. Folgender Code dürfte nicht ganz richtig sein, schließlich hast du extra den Konstruktor programmiert, verwendest ihn aber nicht. Bei der Erzeugung von a, b und c solltest du noch Standardwerte nachreichen, ansonsten kommt bei der Addition nur Mumpitz raus.
| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 | class Rational
{
public:
Rational(int i); //Konstruktor für Konvertierungen von Ganzzahlen
Rational operator+(Rational const& rhs) const;
};
Rational a, b, c;
int i;
a = b + c; //ok, keine Konvertierung nötig
a = b + i; //ok, implizite Konvertierung des zweiten Arguments
a = i + c; //FEHLER: erstes Argument kann nicht konvertiert werden, da operator+ keine freie Funktion | | |
|
|
|
 |
Nexus
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.05.2006
Beiträge: 10328
|
Nexus Mitglied
17:32:45 09.06.2012 Titel: |
Re: Tip Top |
Zitieren |
| nuke1600 schrieb: | | schließlich hast du extra den Konstruktor programmiert, verwendest ihn aber nicht. | Doch, er wird für die implizite Konvertierung von int nach Rational verwendet.
| nuke1600 schrieb: | | Bei der Erzeugung von a, b und c solltest du noch Standardwerte nachreichen, ansonsten kommt bei der Addition nur Mumpitz raus. | Der Code würde gar nicht kompilieren, weil kein Defaultkonstruktor vorhanden ist. Aber wie die Objekte erzeugt werden, ist in dem Beispiel nebensächlich... |
|
|
|
 |
pumuckl
Moderator
Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 7326
|
pumuckl Moderator
18:44:43 11.06.2012 Titel: |
Re: Tip Top |
Zitieren |
|
 |
Sone
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3473
|
Sone Mitglied
12:52:20 19.08.2012 Titel: |
|
Zitieren |
Btw, jetzt mit C++11 können einige Operatoren wie operator?: überladen werden. Kommt dazu noch was? |
_________________ You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur.
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 692
|
pyhax Mitglied
13:35:13 19.08.2012 Titel: |
|
Zitieren |
| Sone schrieb: | | Btw, jetzt mit C++11 können einige Operatoren wie operator?: überladen werden. Kommt dazu noch was? |
Wo hast du das den her? |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
Sone
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3473
|
Sone Mitglied
16:58:42 19.08.2012 Titel: |
|
Zitieren |
| pyhax schrieb: | | Sone schrieb: | | Btw, jetzt mit C++11 können einige Operatoren wie operator?: überladen werden. Kommt dazu noch was? |
Wo hast du das den her? |
Mein Fehler, hab mich im Standard verguckt. Siehe 13.6.24, war schon ne Weile her, hab mich falsch erinnert... |
_________________ You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur.
|
|
 |
Zsar
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.09.2008
Beiträge: 22
|
Zsar Mitglied
08:56:23 15.11.2012 Titel: |
|
Zitieren |
Mmh, wäre es möglich, Beispiele für die Überladung von operator-> und operator->* zu bekommen? Insbesonders, da das hier anders als der Artikel zu behaupten scheint, dass typ * operator->() für den Zugriff auf Elemente von typ gedacht ist (mag aber auch einfach nur schlecht formuliert sein).
... Kann mir nicht recht vorstellen, wie man das zu verwenden hat.
Ich glaube, dass ich damit elegant dieses Ding hier vereinfachen könnte:| Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | typedef struct Nest
{
double wert;
double * koordinaten;
double * wertigkeiten;
}
Nest * LeeresNest(const size_t & dimension, const size_t & bewohner)
{
Nest * ausgabe = (Nest *)operator new(2 * sizeof(double *) + (1 + dimension + bewohner) * sizeof(double));
ausgabe->koordinaten = (double *)(&ausgabe->wertigkeiten + 1);
ausgabe->wertigkeiten = ausgabe->koordinaten + dimension;
return ausgabe;
} | | (siehe dieses Thema, falls die Motivation kümmert)
Weiterhin:
Wenn ich mir diesen überladenen Operator anschaue:| Code: | | vector<T,Allocator>& operator= (const vector<T,Allocator>& x); | | dann wird derselbe so benutzt:| Code: | vector a;
vector b = a; | |
Mit diesem hier:| Code: | | void* operator new (std::size_t size) throw (std::bad_alloc); | | sollte die Verwendung also dergestalt aussehen:| Code: | | Nest * (Nest *)new 2 * sizeof(double *) + (1 + dimension + bewohner) * sizeof(double); | | Funktioniert aber nicht - die Syntax aus dem oberen Beispiel ist erforderlich. Wie kommt das?
Gleichsam wird aus| Code: | | void* operator new (std::size_t size, void* ptr) throw(); | | in der Anwendung nicht etwa| Code: | | new <wert> <zeiger>; | | sondern eines von diesen beiden:| Code: | operator new(<wert>, <zeiger>); // keine Ahnung, wie hier der Konstruktor zu wählen wäre
new (<zeiger>) <Konstruktor>; | | Praktisch. Aber woher!? |
Zuletzt bearbeitet von Zsar am 09:26:07 15.11.2012, insgesamt 3-mal bearbeitet |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|