Ich möchte eine Funktion in C++ erstellen, um einen Zeiger auf eine Klasse mit einigen Bedingungen zu erhalten. Ich habe mehrere Instanzen für eine Klasse, die durch eine Zahl identifiziert werden. Abhängig von der Nummer möchte ich die entsprechende Instanz erhalten.Äquivalent zu aus C# in C++
In C# würde es so etwas wie sein:
class main
{
private Example item1;
private Example item2;
private Example item3;
private Example item4;
public bool InitializeItem(int itemID)
{
bool isInitialized = false;
Example item;
if (tryGetItem(itemID, out item))
{
item = new Example(itemID);
isInitialized = true;
}
return isInitialized;
}
private bool tryGetItem(int itemID, out Example item)
{
bool canGet = false;
item = null;
switch (itemID)
{
case 1:
item = item1;
canGet = true;
break;
case 2:
item = item2;
canGet = true;
break;
case 3:
item = item3;
canGet = true;
break;
case 4:
item = item4;
canGet = true;
break;
}
return canGet;
}
}
class Example
{
int number { get; set; }
public Example(int i)
{
number = i;
}
}
Aber in C++ Ich bin ein wenig mit Referenzierung und Zeiger verwirren. Ich lese einige Tutorials wie this one (auf Französisch). Ich habe grundlegende Zeiger verstanden, aber mit Klassen und Funktionen bin ich verloren.
Mit erster Antwort, änderte ich meinen Code:
Example item1;
Example item2;
Example item3;
Example item4;
bool tryGetItem(int b, Example &ptr)
{
bool canGet = false;
ptr = NULL;
switch (b)
{
case 1:
ptr = item1;
canGet = true;
break;
/* etc */
}
return canGet;
}
bool InitializeItem(int id)
{
bool isInit = false;
Example ptr = NULL;
if (getParam(id, ptr))
{
ptr = Example(id);
isInit = true;
}
return isInit;
}
Aber es funktioniert nicht. Ich habe versucht zu debuggen, ist wahr, in der {..} die Variable ptr
ist korrekt auf 1 gesetzt, aber item1
ändert sich nicht.
Bearbeiten: Ich glaube nicht, dass es das gleiche Problem ist, dass mögliche doppelte Post. Ich möchte nicht ändern ptr
in tryGetItem
, ich möchte tryGetItem
verwenden, um ptr
auf einen meiner itemX
zeigen. Nach der Verwendung von tryGetItem
mit dem Wert 1 muss die Änderung ptr
auch item1
ändern.
Suchen Sie nach "pass by reference" '&' und lesen Sie ein [gutes C++ Buch] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – UnholySheep
C++ funktioniert anders als C#. Objekte werden normalerweise so gehandhabt, wie Sie es behandeln und "int" zum Beispiel in C#. Objekt in C++ ist normalerweise nicht "Verweis auf ein Objekt auf dem Heap", sondern mehr als "Objekte sind einfach Objekte, wie Ints sind einfach Ints" –
Im Allgemeinen wird die Rückgabe der Ausgabe gegenüber einem Ausgabeparameter bevorzugt. –