C++ : Konstanten in Klassen...

xenayoo

Aktives Mitglied
Thread Starter
Dabei seit
29.02.2004
Beiträge
2.126
Reaktionspunkte
6
Ich verzweifele noch über dem Buch von Arnold Willemer! Neues Problem: Konstanten in Klassen:

Was konstante Elementfunktionen sind und wie man Sie impliziert, weiß ich. Wie aber impliziert man Konstante in eine Klasse?

Zitat:"...es ist aber möglich, die Konstante über einen 'Initialisierer' am Konstruktor vorzubelegen:

class tKonstant
{
public:
const int MaxPuffer;
tKonstant() : MaxPuffer(500) {}
tKonstant(long size);
};

tKonstant::tKonstant(long size): MaxPuffer(size)
{
......


Der Initialisierer wird also immer bei der Definition der Konstruktorfunktion angebracht, nicht bei der Deklaration...."

So, die Zeile const int MaxPuffer; verstehe ich ja noch. Die nächsten 2 Zeilen nicht mehr, denn beides scheinen Deklarationen für denselben Konstruktor zu sein, der dann außerhalb der Klasse separat definiert und initialisiert wird.
Wer erklärt mir, was die zwei Zeilen im einzelnen bewirken?
Kann ich diese zwei Zeilen zusammenfassen - ähnlich der Initialisierung?
Kann ich dann auch Werte an die Klasse übergeben, und diese in einem Objekt als konstant definieren?
 
schieb....
 
ne antwort kostet aber 20 EUR....



ugly.gif



sry kann dir nicht helfen.. aber konnte mir das nicht verkneifen. mit google findet man doch aber tausende c++ tutorials? wird doch sicherlich was dabei sein
 
Theome schrieb:
ne antwort kostet aber 20 EUR....
;) Hast du für diesen Post dein gesamtes Hirn verwendet?
Theome schrieb:
sry kann dir nicht helfen.. aber konnte mir das nicht verkneifen. mit google findet man doch aber tausende c++ tutorials? wird doch sicherlich was dabei sein
Danke, wenn es das gäbe, hätte ich es sicher nicht hier in das Forum
geschrieben, zumal man mir hier schon sehr kompetent gehofen hat.....
 
OK, ich versuchs mal.

Zitat:"...es ist aber möglich, die Konstante über einen 'Initialisierer' am Konstruktor vorzubelegen:"

Was heißt hier vorbelegen? Warum heißt die Konstante wohl Konstante?

tKonstant() : MaxPuffer(500) {}

Das ist der Standard Konstruktor. Ein Konstruktur wird immer aufgerufen, wenn du ein Objekt der Klasse erzeugst. Allerdings ist das wie du siehst nicht nur Deklaration, sondern Deklaration und Implementierung in einem. Eine so genannte Inline-Funktion.

tKonstant(long size);

Hier wird der Standard-Konstruktur überladen. Das heißt, es existieren verschiedene Funktionen mit dem gleichen Namen, die vom Compiler anhand ihrer Signatur unterschieden werden. Das heißt du kannst wenn du ein neues Objekt anlegst entweder einen Parameter size mitgeben, auf den MaxPuffer gesetzt wird. Dann wird der Konstruktur mit Parameter aufgerufen. Gibts du keinen Parameter mit, wird der Standard Konstruktor ohne Parameter aufgerufen und MaxPuffer auf 500 gesetzt.
 
Zuletzt bearbeitet:
Ich weiß nicht ob Du dieses bzw. dieses Forum kennst, aber dort sind absolute c++ Cracks zu hause und können Dir vielleicht auch einmal schneller weiterhelfen. :cool:
Ist nur eine Idee. :p
 
Danke *-jalapeno-*, das hat mir sehr geholfen. Beim Zitat habe ich vorweg einiges weggelassen, wo der Autor erklärt hat, wie es nicht funktioniert. Ich kann also nicht einfach eine Konstante definieren. Aber - genau diese Dokumentation fehlt im Buch....
 
@xenayoo: nein, habe für meine Antwort das Gehirn eher wenig verwendet, aber ich fand deine Sig einfach so geil ;)

Ich empfehle dir, eine C++ Sprachreferenz/Spezifikation griffbereit zu halten. In solchen Problemfällen ist es meiner Meinung nach immer am besten, in den Definitionen nachzusehen. Hier habe ich mal eine gefunden: IBM: C/C++ Language Reference (1.7 MB), für dein Problem siehe Seite 296 - da steht wie Konstruktoren aussehen können.

Mir hat beim lernen von Objective-C und Cocoa auch die Sprachreferenz von Apple viel geholfen: The Objective-C Programming Language.

So denn... noch viel Erfolg!
 
Zurück
Oben Unten