Array mit Startwerte will nicht

FireFlow hat gesagt.:
Ich behaupte mal du hast noch nicht ganz verstanden wie eine Klasse instanziert wird.

Jo, kann gut sein.

FireFlow hat gesagt.:
[CAPS MODE]
ICH HASSE LEUTE DIE CROSSPOSTINGS IN FOREN VERTEILEN DA FÜHLT MAN SICH ALS HELFER NUR NOCH AUSGENUTZT!
[/caps mode]

Kann ich verstehen, doch leider gab es hier "nur" Einzeilenpostings, die mich nicht wirklich weiterbrachten. Deins ist nun recht ausführlich und damit kann ich auch arbeiten.
Vielen Dank.

Grüsse Tonda
 
moin


Was erwartest du denn?
Erwartest du das du ne Frage stellst, und sie direkt komplett und ausführlich beantwortet wird, sodass du nichts mehr selber tun musst?


mfg
umbrasaxum
 
Nein, das erwarte ich sicher nicht. Aber was fange ich mit Ein Zeilen Postings an? Vielleicht wisst ihr ja was mit Häppchen anzufangen, ich als Anfänger tue das nicht!

Wenn wir schon von erwarten sprechen: Eine Erlärung warum ich ein Array nicht so initialisieren kann: int[1] = {2}; Und wie das in einer Klasse\Konstrukor erfolgen muss.
Da muss noch nicht mal Code stehen. Etwas Theorie reicht mir schon. Denn dann strenge ich auch meinen Grips an, um das in Code umzusetzen.

Was das Crossposting angeht: Ihr fühlst Euch ausgenutzt, ich mich verfolgt. Beides nicht so toll.

Grüsse Tonda
 
Zuletzt bearbeitet:
@FireFlow

Code:
// Diese Variante ruft nur den Konstruktor mit Übergabeparameter auf
		 TTest(int const& v)
		   : value(v)
		 {
		 }

Bin zwar eigendlich mit C++ ganz gut vertraut, aber was bedeutet ":value(v)" hinter dem Constructor ?
Und ist das : value(v) überhaupt sinnvoll, weil du ja eh ne Referenz von v bekommst ?

Danke schonmal für die Nachhilfe...

Gruss

MFC OpenGL
 
2 Sachen stören an dem Design von "monate":

1) Die Monate sind als "int" deklariert. Sie sind aber nicht veränderlich, also deshalb schon mal "const int" verwenden.

2) "monate" ist ein Vektor, der nur einmal im ganzen Programm vorkommen muss. So, wie du es vorhattest, würde er bei jeder Instanz von "Datum" dupliziert.
Deshalb besser "static const int monate[]" definieren.

Oder konkreter ausgedrückt:
In der Headerdatei:
Code:
class Datum {
public:
  static const int monate[];
};
In der Implementierungs-Datei (irgendwo außerhalb der Klasse hinschreiben):
Code:
const int Datum::monate[] = { 31, 28, ... };
 
Zuletzt bearbeitet:
MFC openGL hat gesagt.:
@FireFlow

Code:
// Diese Variante ruft nur den Konstruktor mit Übergabeparameter auf
		 TTest(int const& v)
		   : value(v)
		 {
		 }

Bin zwar eigendlich mit C++ ganz gut vertraut, aber was bedeutet ":value(v)" hinter dem Constructor ?
Und ist das : value(v) überhaupt sinnvoll, weil du ja eh ne Referenz von v bekommst ?

Danke schonmal für die Nachhilfe...

Gruss

MFC OpenGL

Das :value(v) ist die Initliasierungsliste, hab das oben schonmal anhand von einem beispiel erklärt. Dadurch kann man sich einen Defaultkonstruktor ersparen wenn es sich um eine Klasse handelt. Bei einem elementaren Datentyp der lokal initalisiert wird wäre es egal, da dort keine Standard-Wertezuweisung erfolgt und man könnte die Zuweisung im Konstruktor machen.
Die Referenz auf den Integer übergebe ich damit nicht extra eine lokale Variable im Konstruktor erzeugt werden muss.
 
Dadurch kann man sich einen Defaultkonstruktor ersparen wenn es sich um eine Klasse handelt.
Ansonsten hast du ja recht, aber was hat das mit dem Defaultkonstruktor zu tun? Den hast du ohnehin, nur erstellt ihn der Compiler, wenn du es nicht tust. Einen Defaultkonstruktor ersparen (wenn man das so sagen kann) könnte man höchstens durch Defaultwerte für die Konstruktorparameter, wobei es aber egal ist, ob eine Initialisierungsliste verwendet wird.

Beispiel:
Code:
class A
{
public:
  int wert;

  // gültiger Defaultkonstruktor:
  A( int w = 4711 ) 
  : wert( w )
  {}  
};
Naja, das ist eigentlich schon off topic, oder?
 
Zurück