Objekte in C++ benennen

Diskutiere Objekte in C++ benennen im Developer Network Forum im Bereich Hardware & Software Forum; HI, ich hab in c++ eine Klasse deklariert, und will jetzt einfach objekte durchnummeriert kreiren. Ich könnte natürlich erstmal ein array bauen...
  • Objekte in C++ benennen Beitrag #1
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
HI,
ich hab in c++ eine Klasse deklariert, und will jetzt einfach objekte durchnummeriert kreiren. Ich könnte natürlich erstmal ein array bauen, und dann jedes neue Objekt als obj[a] einführen, allerdings hab ich dann ja sozusagen einen "starren" Array der weder bei Bedarf erweitert wird, oder evtl mehr Platz belegt als benötigt wird (oder geht das auch anders???)
Meine Frage ist gibts ne Möglichkeit, dass ich einen Objektnamen vorgebe an den ne Zahl angehängt wird, anstatt alle Objekte in einem Array, abzulegen, beziehungsweise wie ich eine Eingabeaufforderung mache, mit der der User den Objektnamen bei jedem neuen Objekt vorgibt....
etwas konfus formuliert fürchte ich, aber ich hoffe ihr könnt mir helfen


mfg
bagman
 
  • Objekte in C++ benennen Beitrag #2
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Eingabe Aufforderung
Code:
cin>>[I]variable[/I];

aber zu deiner Frage, ob du eine Variable mit einer zahl immer erweitern könntest, ich denke das geht so nicht, hier müsstest du glaub ich Arrays verwenden
 
  • Objekte in C++ benennen Beitrag #3
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Dein Problem liegt nicht an der Namensgebung, sondern grundlegender an den verschiedenen Möglichkeiten, Objekte zu speichern.
Prinzipiell gibt es die Möglichkeit starren Strukturen wie Arrays, bei denen du bereits im Code die Größe festlegst. Das ist sinnvoll, wenn du zu dieser Zeit die genaue Anzahl der Objekte bereits kennst. Alternativ dazu kannst du zur Laufzeit mittels malloc (und free) Speicher in passender Größe reservieren und auf diesen (unter anderem) wie auf ein Array zugreifen. Dies ist sinnvoll, wenn du z.B. den Benutzer im vorhinein fragen kannst, wie viele Objekte er anlegen möchte. Da sich so ein Speicherbereich nicht so einfach bei Bedarf erweitern lässt, ist es aber eher ungeeignet, wenn der Benutzer z.B. beliebig viele Objekte eingeben können soll, bis er auf Fertig klickt oder sowas in der Art.
Dafür sind dann dynamische Strukturen wie z.B. sogenannte verkettete Listen geeignet. Dort wird im Prinzip der Speicher für jedes neue Objekt in der Liste extra reserviert, wenn es angelegt wird. Zur Verwaltung hat jedes Objekt in der Liste einen Zeiger auf seinen Nachfolger (oder ähnlich, da gibt es verschiedene Möglichkeiten). Nachteil dabei ist u.a. die schwierigere Implementierung. Solche Dinge gibt es allerdings auch fertig zum Einbinden in dein Programm. Wobei ich empfehlen würde, mal nach dem Ausdruck "linked list" zu suchen, und sowas zur Übung selber zu programmieren.
 
  • Objekte in C++ benennen Beitrag #4
WhiskeyCola16

WhiskeyCola16

Bekanntes Mitglied
Dabei seit
22.12.2001
Beiträge
971
Reaktionspunkte
1
Ort
Österreich
Eine einfach- oder doppelt verkettete Liste wenigstens einmal selber ausprogrammiert zu haben erachte ich für sehr sinnvoll.

Abgesehen davon bietet die STL schon einige schöne dynamische Speicherstrukturen (vector, map, list, queue und deque usw...), welche sich sehr gut handhaben lassen.

Darüber hinaus sollte in C++ statt malloc und free, new und delete verwendet werden.

Übrigens, ein sehr gutes Buch zu C++, welches mir erst vor kurzem in die Finger gekommen ist: "Die C++ Programmiersprache" von Stroustrup. Mittlerweile bereits in der 4.Auflage.

lg,
Patrick
 
  • Objekte in C++ benennen Beitrag #5
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
danke für den tipp werd ma sone linked list bauen
 
  • Objekte in C++ benennen Beitrag #6
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
So, hab ne linked list Übung angefangen, leider ist gleichn neues Problem aufgetreten. Ich habe Zwei Klassen, dabei beinahltet die eine Klasse einen int sowie einen Pointer auf ihren Nachfolger, und die andere Klasse soll Methoden beinhalten aus Instanzen der ersten Klasse einen ring zu bauen. Das klappt auch erstmal gut, aber wenn ich jetzt folgendesn mache in einer Methode von Klasse2

(*pointeraufKlasse1).MethodeVonKlasse1;

dann wird gesagt das statement kann die Adresse der überladenden Funktion nicht auflösen.....
Die Funktion ist schon als public deklariert, und google konnte mir spontan auch keine Antwort liefern.
Quelltext kann ich posten wenn das jemand für hilfreich hält...

mfg
Bagman
 
  • Objekte in C++ benennen Beitrag #7
WhiskeyCola16

WhiskeyCola16

Bekanntes Mitglied
Dabei seit
22.12.2001
Beiträge
971
Reaktionspunkte
1
Ort
Österreich
Codeschnipsel und Compilermeldung sind immer wieder was feines...

Außerdem sollte die Datenklasse von der Liste getrennt sein. Sprich: 1 Datenklasse, 1 List-Klasse, 1 Listenknoten-Klasse. Der Listenknoten hat einen Datapointer auf die Daten und einen next Pointer auf den nächsten Knoten. Die Liste managed wie Daten hinzugefügt, entfernt etc. werden können. Verwaltet also ihre Knoten.
 
  • Objekte in C++ benennen Beitrag #8
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
So, ich versuch mal das Problem ausführlich aber nicht ausschweidend darzustellen:
dieser Teil
class Element
{
public:
int me; //Inhalt des Elements
Element * so; //pointer auf nächstes
public:
void baue() //erzeugt neues Element
{
so=new Element;
};
Element* shownext() //gibt pointer aus
{
return so;
};
}
first
;
ist die Klasse der Ringelemente, wobei die Instanz first direkt deklariert wird, um einfacher auf das erste Element verweisen zu können. Die manager-Klasse ist wie folgt deklariert
class ring
{
protected:
int n; //menge an elementen im ring
Element *erster,*letzter,*aktuell; //Steuerpointer
public:
const char* makering() //Das hier ist die Hauptsache
{
if (n != 0) //schließt spezialfall des leeren rings ein
{
erster=&first;
aktuell=erster;
int s=0;
while (s != n) //hier wird beginnend beim ersten der Ring gebaut
{
(*aktuell).baue;
aktuell=(*aktuell).so; //genau hier sagt der compiler: statement //kann die Adresse der überladenen Funktion nicht auflösen
n++;
}
letzter=aktuell;
return "done";
}
else
{
return "der Ring ist leer";
}
};


};

So, ich hoffe das war so inetwa der relevante Teil. Bin dankbar für Hinweise.

mfg
Bagman
 
  • Objekte in C++ benennen Beitrag #9
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Hi !

Wenn das irgendwann mal funktioniert, ist das eine Liste und kein Ring.
Ich werde daher im folgenden immer von Liste statt Ring schreiben.
Deine Klasse Element benötigt zwar einen next-Zeiger, ansonsten sollten sich darin aber keine Elemente bzw. Methoden zur Verwaltung der Liste befinden. (Also kein first,baue(), etc.)

Die gehören nun mal in die Klasse Liste.

Deine Klasse Liste sollte über folgende Element verfügen:

Einen Zeiger auf das erste Element - das nennt man bei einer Liste wurzel;
Einen Zeiger auf das aktuelle Element: z.B. aktuell.

Eine Methode, um den Listenzeiger an den Anfang zu setzen: z.B. setFirst()
Eine Methode, um ein Element weiterzurücken: z.B. next()
Eine Methode, um auf das aktuelle Element zuzugreifen: z.B. getActual()
Und natürlich eine Methode, um ein Elemen zu speichern, z.B. store();

Einen Konstruktor: void Liste() {aktuell=0;wurzel=0}

Dafür solltest du makering() weglassen. Dafür gibt es ja schliesslich die Konstruktoren.

Zwei kleine Anmerkungen noch:
1. Bei deinem Code würde niemals ein Element abgespeichert.
2. Statt (*aktuell).so schreibt man eigentlich: aktuell->so.
 
Zuletzt bearbeitet:
  • Objekte in C++ benennen Beitrag #10
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
ok, habs jetzt hingekriegt ne Liste zu bauen. Danke für die Hilfe soweit.
Zwei Fragen hab ich allerdings noch
-Wenn das Letzte Element wieder auf das erste zeigt, hab ich dann einen Ring?
-Als einzige Fehlermeldung krieg ich jetzt noch

prog.c:110: Fehler: expected `}' at end of input
prog.c:110: Fehler: expected unqualified-id at end of input

wobei hier auf die letzte Programmzeile verwiesen wird, also auf das }; von main. main ist folgendermaßen deklariert
int main(void)
{
...
return 0;
};
mir ist schleierhaft was für ein input gemeint ist, weiß da jemand Rat??

mfg
bagman
 
  • Objekte in C++ benennen Beitrag #11
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Kann es sein, dass da noch ein `}` fehlt?
 
  • Objekte in C++ benennen Beitrag #12
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
jepp, jetzt läufts, vielen Dank an alle:victory:
 
Thema:

Objekte in C++ benennen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben