myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Konstruktor (https://mygully.com/showthread.php?t=2815431)

eminwargo 24.01.13 19:37

Konstruktor
 
Hallo Community,

ich bräuchte bitte eure Hilfe. Ich bin gerade dabei C++ zu lernen und nun habe ich mein erstes Problem. Ich verstehe leider nicht genau, wofür Konstruktoren sind. Ich habe mir schon so vieles durchgelesen und angeschaut aber eine einfache simple Erklärung oder ein Beispiel habe ich nicht gefunden.

Ich bitte euch kann mir einer dieses erklären, vllt. mit einem kleinen Programm eine Ausgabe oder so in der art.

Danke im voraus;)

Thelvan 24.01.13 20:01

Der Konstruktor ist die Methode die aufgerufen wird, wenn von einem Objekt eine neue Instanz angelegt wird.

Sie heißt immer genauso wie das Objekt selbst und gibt die angelegte Instanz zurück.

Your_Conscience 24.01.13 20:03

Vielleicht hilft dir ja das hier: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

slahn 25.01.13 17:14

Die eigentliche Frage ist doch ... wie weit hast du das Konzept hinter Objektorientierter Programmierung bereits verstanden? Weißt du was ein Objekt überhaupt ist?

Grundsätzlich ist es als eine Methode gedacht, die automatisch zum initalisieren eines Objekts aufgerufen wird. Wie der Name es schon sagt, ist diese Methode der Erzeuger/Konstruktor des Objekts. Wenn wir also z.B. von dem Objekt Auto sprechen, dann ist diese Methode dazu da, um das Auto zu bauen (Lackieren, Reifen montieren, Türen montieren, ...).

Wenn ich eine Bestimmte anzahl von diesen Methoden festlege, kann ich so festlegen, dass nur bestimmte Arten eines Objekts erstellt werden können (z.B. nur Autos mit 4 Rädern und nur mit einer bestimmten Auswahl an Farben).

Jogi Sigrak 25.01.13 22:41

Ein kleines Beispiel:

Code:


// tv.h
#ifndef TV_H__
#define TV_H__

class TV
{
  public:
  void setStation(int station);
  int getStation();
  TV();
  TV(int station);
 
  private:
  int station;
};

#endif
______________________________________________________________________________________

//tv.cpp

#include <iostream>
#include "tv.h"

using namespace std;

TV::TV(){
        station = 1;
}

int TV::getStation()
{
 return this->station;
}

void TV::setStation(int station)
{
 this->station = station;
}

TV::TV(int station){
if (station < 100){
        this->station = station;
        }
        else {
        this->station = 1;
        }
}

int main(){
        TV myTV;
        cout << myTV.getStation() << endl;
        myTV.setStation(10);
        cout << myTV.getStation() << endl;
        TV *myTV2 = new TV(111);
        cout << myTV2->getStation() << endl;
        delete myTV2;
        return 0;
}
};

(Programm macht nicht viel, soll nur als Bsp dienen)

Beispielsweise wird hier im Konstruktor tv::tv() eine Variable initialisiert.
Natürlich kann man hier noch mehr machen wie z.B. Speicher reservieren für ein Array. Dann braucht man auch einen Destruktor, welcher diesen zuvor reservierten Speicher wieder freigibt.

Ich bin selber noch nicht so fit in C++, und versuche auch gerade die Sprache zu lernen. (Kann also sein, dass ich auch falsch liege :D)

slahn 25.01.13 23:46

@Jogi Sigrak: Versuch dir abzugewöhnen mit so vielen Pointern und besonders Rückgaben von Pointern zu Arbeiten ... ansonsten passt alles ...

Jogi Sigrak 26.01.13 12:15

war ja nurn beispiel programm.^^

slahn 26.01.13 15:14

Nur warum muss ein Beispielprogramm einen schlechten Stiel haben? War ja nur ein Tipp für dich, damit du in Zukunft weniger Fehler beim Programmieren machst :)

Etikareti 26.01.13 22:02

Zitat:

Zitat von Jogi Sigrak (Beitrag 24232532)
war ja nurn beispiel programm.^^

Ist aber nicht ein sehr gutes Beispiel, vorallem wozu benutzt du immer einen this-pointer?

Thelvan hat eh schon genau beschrieben, was ein Konstruktor ist.

Jogi Sigrak 27.01.13 12:30

Das war ja nur ein Beispiel, habe da mir die Funktionsweise von Pointern angeschaut. War kein explizites Beispiel fürn Konstruktor.
Klar, ich benutze Pointer da nicht so extrem wie hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.