Klassen in Funktionen übergeben
-
Hallo, wie kann ich einer Funktion eine Klasse übergeben? Ich habe versucht, die Klasse außerhalb der main Funktion zu initialisieren, aber erstens soll man ja nichts globales schreiben und zweitens hat das nicht funktioniert.
-
Ich nehme an, dass du nicht eine Klasse, sondern ein Instanz der Klasse übergeben möchtest.
Wie übergibts du eine Variable des Typs
int
and eine Funktion? Zeige ein Beispiel, das hilft dir.
-
Ich möchte zum Beispiel die Koordinaten eines beliebigen Objektes verändern:
void move(object, dx, dy){ object.x += dx object.y += dy }
Und jetzt frage ich mich, was ich als Paramtere angeben soll, weil C++ ja immer den Datentyp wissen will
-
Die Basisklasse
-
Oder als Template:
template<typename T, typename U> void move(T object, U dx, U dy) { object.x += dx object.y += dy }
-
@Th69 Bitte einer Referenz übergeben, sonst wird das mit dem Ändern nichts.
-
Oh, ja:
template<typename T, typename U> void move(T& object, U dx, U dy) { object.x += dx object.y += dy }
-
@Th69 Tut mir leid, aber könntest du ein konkretes Beispiel zeigen? Bin recht neu
-
@daniel sagte in Klassen in Funktionen übergeben:
könntest du ein konkretes Beispiel zeigen?
Was @Th69 geschrieben hat ist ein konkretes Beispiel für eine Funktion, die ein Objekt eines beliebigen Typs nimmt und dessen Member
x
undy
verändert ...
-
ja, is typename dann der name der Klasse?
-
@daniel
T
undU
sind die Typen der übergebenen Parameter.typename
(oderclass
) ist das Schlüsselwort um Type template parameter zu deklarieren.
-
This post is deleted!
-
Zeig doch mal was du an Quellcode schon hast, dann können wir dir vielleicht konkreter helfen. Ich gehe davon aus, dass dir die bisherigen Antworten nicht wirklich geholfen haben
-
@daniel sagte in Klassen in Funktionen übergeben:
Ich möchte zum Beispiel die Koordinaten eines beliebigen Objektes verändern:
void move(object, dx, dy){ object.x += dx object.y += dy }
Und jetzt frage ich mich, was ich als Paramtere angeben soll, weil C++ ja immer den Datentyp wissen will
void move (MyClass object, int dx, int dy) //MyClass = der name deiner Klasse
sofern du in
MyClass
mit int gearbeitet hast.
-
@Darktutnix Thema verfehlt. Es geht darum ein Objekt eines *beliebigen* Typs zu übergeben. Das geht entweder mit Templates oder mit übergabe eines Basisklassenzeigers für eine Klassenhierarchie.
-
@Swordfish sagte in Klassen in Funktionen übergeben:
@Darktutnix Thema verfehlt. Es geht darum ein Objekt eines *beliebigen* Typs zu übergeben. Das geht entweder mit Templates oder mit übergabe eines Basisklassenzeigers für eine Klassenhierarchie.
Dann habe ich ihn falsch verstanden. Glaube allerdings das er einfach nicht weiß wie man Instanzen an funktionen übergibt. Bezweifle das "beliebig" sich hier auf unterschiedliche Klassen mit gleichen Parametern bezieht, da es ja doch recht Spezifisch ist.
Sonst würde ich auf Vererbung Tippen, wobei hier MyClass = ParentClass sein müsste. Also für einen etwas geübten auch nicht so schwer zu begreifen.
Wenn ich raten müste sieht sein code irgendwie so aus:
void main(){ //...... MyClass instanc = new MyClass(); //...... move(instanc, 5,7); //...... }
Die Sache das er hier:
@Th69 sagte in Klassen in Funktionen übergeben:
Oh, ja:
template<typename T, typename U> void move(T& object, U dx, U dy) { object.x += dx object.y += dy }
fragte was T bzw U ist, deutet für mich auf einen Anfänger hin. Da ist es schwer zu begreifen was der unterschied zwischen dem was du schreibst (Klasse) und der eigentlichen erzeugten Box (instanz) ist. Sollte ich falsch liegen entschuldige ich mich und lösche meine störenden Aussagen gern wieder
-
@Darktutnix sagte in Klassen in Funktionen übergeben:
Dann habe ich ihn falsch verstanden. Glaube allerdings das er einfach nicht weiß wie man Instanzen an funktionen übergibt. Bezweifle das "beliebig" sich hier auf unterschiedliche Klassen mit gleichen Parametern bezieht, da es ja doch recht Spezifisch ist.
@daniel sagte in Klassen in Funktionen übergeben:
Und jetzt frage ich mich, was ich als Paramtere angeben soll, weil C++ ja immer den Datentyp wissen will
klingt schon sehr danach, daß es verschiedene Typen sind, die OP übergeben können wollen tut.