C++ : Konstanten in Klassen...

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von xenayoo, 17.08.2005.

  1. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    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?
     
  2. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    schieb....
     
  3. Theome

    Theome MacUser Mitglied

    Beiträge:
    55
    Zustimmungen:
    3
    MacUser seit:
    03.09.2004
    ne antwort kostet aber 20 EUR....



    [​IMG]


    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
     
  4. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    ;) Hast du für diesen Post dein gesamtes Hirn verwendet?
    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.....
     
  5. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    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: 17.08.2005
  6. pdr2002

    pdr2002 MacUser Mitglied

    Beiträge:
    6.937
    Zustimmungen:
    239
    MacUser seit:
    28.01.2004
    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
     
  7. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    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....
     
  8. Theome

    Theome MacUser Mitglied

    Beiträge:
    55
    Zustimmungen:
    3
    MacUser seit:
    03.09.2004
    @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!
     
Die Seite wird geladen...