Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

21

09.07.2011, 19:22

Nun, ComputerAddict, wie steht es dann damit?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class MyOwnFreakyMap
{
public:
    MyOwnFreakyMap* addItem ( Foo* bar )
    {
        doSomethingWith ( bar );
        return this;
    }
}


Das erlaubt prima so etwas:

C-/C++-Quelltext

1
myOwnFreakyMap->addItem ( foo )->addItem ( bar )->doSomethingElse ( );
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

22

09.07.2011, 19:32

Stimmt, da ist es auch sinnvoll, aber eine Methode wie im Beispiel von Koschi, die nur this zurückgibt ist nonvirtual einfach unnötig.
(Belehrt mich eines Besseren, wenn es nicht so ist ;) )

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

23

09.07.2011, 19:51

Bitte nur Beispiele posten die auch funktionieren. Das ist keine Besserwisserei. Falsche Beispiele verwirren den Threadersteller nur unnötig. Also lieber zwei mal drüber schauen oder gar nicht posten.

C-/C++-Quelltext

1
2
3
int arr[10];
int sum = 0;
for (int* p = arr[0]; p < arr[10]; ++p) sum += *p;

Der Indexoperator dereferenziert auch gleich.

C-/C++-Quelltext

1
2
int sum = 0;
for (int* p = arr; p < arr+10; ++p) sum += *p;

Das müsste funktionieren, ist aber nicht schön...

Stimmt, da ist es auch sinnvoll, aber eine Methode wie im Beispiel von Koschi, die nur this zurückgibt ist nonvirtual einfach unnötig.
(Belehrt mich eines Besseren, wenn es nicht so ist ;) )

Wenn man einen Iterator hat ist es in manchen Augen vielleicht angenehmer.

C-/C++-Quelltext

1
2
3
object* o = &(*it);
// oder...
o = it->getObject();

Ich finds allerdings auch unnötig xD
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

24

11.07.2011, 15:07

Nochmal zu new und delete: Wenn du willst, dass sich die Größe eines Arrays während der Laufzeit des Programmes ändert, kannst du sie verwenden.

C-/C++-Quelltext

1
int arr[10]; //Dieses Array hat jetzt während der gesamten Laufzeit 10 Elemente (->es ist statisch)

Hast du aber jetzt ein Programm, in dem zum Beispiel eine beliebige Anzahl an Zahlen addiert werden sollen, musst du das Array dynamisch anlegen.

C-/C++-Quelltext

1
2
3
std::cout << "Wie viele Zahlen sollen addiert werden?\n"; //Text ausgeben
std::cin >> numbercount; //Benutzereingabe
int *Numbers = new int[numbercount]; //Array (eigentlich Zeiger auf Speicherbereich) dynamisch anlegen

Und nie vergessen:

C-/C++-Quelltext

1
delete[] Numbers;

Sonst entstehen Memory Leaks ;)

PS.: Der obige Code könnte Fehler enthalten, sollte mehr oder weniger Pseudocode sein :P
EDIT:Hoppla

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »#Sound~Wave#« (11.07.2011, 18:45)


jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

25

11.07.2011, 15:17

Du meinst delete[] Numbers; Nur delete wäre UB...
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

26

13.07.2011, 12:56

Ich habe noch eine relativ wichtige Ergänzung um Thema new und delete.
Wenn du eine Instanz einer Klasse mit new aufrufst wird genau zu diesem Zeitpunkt der
Konstruktor der Klasse aufgerufen.
Wenn du die Instanz mit delete wieder löschst, dann wird der Dekonstruktor aufgerufen.

C-/C++-Quelltext

1
2
3
4
5
6
7
class Ship
{
// Konstruktor
Ship::Ship();
//Dekonstruktor
Ship::~Ship();
};
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

27

13.07.2011, 13:54

Naja wenn du schon 2 Bücher gelesen hast, bist du sicherlich auch mal über das Thema Polymorphie gestoßen. Dies ist ein wunderbares Gebiet für Zeiger. This ist erstmal relativ egal. Wie du bei den Beispielen gesehen hast, sind dies meist sehr spezielle Gebiete. Wenn du an dem Punkt angelangt bist, dich mit diesen zu beschäftigen dann kommt der Rest von ganz alleine.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

28

13.07.2011, 17:12

Ich habe es doch schon seid Seite 1 verstanden. :D
Trotz Allem: Danke ich euch allen!!

MfG
Check

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

29

14.07.2011, 15:23

Ich würde einfach auf delete verzichten. ;-)

Hallo,

ich an deiner Stelle würde ganz auf das delete verzichten und einen auto_ptr verwenden.

C-/C++-Quelltext

1
std::auto_ptr foo2(new Foo());



Warum?

Ganz einfach, denn wenn du mit new ein Objekt erzeugst, dann musst das Objekt auch irgendwann wieder zerstören.
Wenn du sauber programmierst und keine Fehler machst, dann ist alles OK, aber ...

C-/C++-Quelltext

1
2
3
try{    Foo *f = new Foo(); int a=1;    int b=0;    int c = a / b; //Exception
    delete foo;
    }catch(exception &e){   cout << "Wer ruft nun delete foo auf? :-("}



Fazit: Du hast Müll im Speicher liegen.


Gruß

Fb

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

30

14.07.2011, 15:52

Wenn man auto_ptr empfiehlt sollte man auch auf das merkwürdige Kopierverhalten hinweisen. Das Original wird dabei nämlich ungültig. Wenn man das beachtet ist er nützlich. Ausserdem sollte man darauf hinweisen, dass er nicht in Containern(vector, list, map usw.) verwendet werden darf, da diese normales Kopierverhalten voraussetzen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige