Konstruktor
-
hallo Leute.
ich hab hier mal ne Übung probiert, weil ich des mit Konstruktoren mal richtig verstehen wollte. Nur hab ich hier irgendwie einen kleinen fehler drinnen und ich weiss net wo der liegt. Ich drehe noch durch..#ifndef _SCHUELER_ #define _SCHUELER_ class schueler { private: int alter,iq; public: schueler(); ~schueler(); void zeigedaten(); }; #endif
#include <iostream> #include "Schueler.h" using namespace std; schueler::schueler() { alter=0; iq=0; } schueler::~schueler() { } void schueler::zeigedaten() { cout << "Alter des Schuelers: " << alter << endl; cout << "IQ des Schuelers " << iq << endl; }
#include <iostream> #include <stdlib.h> #include "schueler.h" using namespace std; int main(int argc, char *argv[]) { schueler schueler1; schueler1.zeigedaten(); system("PAUSE"); return 0; }
bildschirmausgabe für die werte alter und iq ist
2293632 //für alter
2008544178 für IQalso er übernimmt halt nicht die werte vom konstruktor. Aber warum????
-
Und noch eine Frage zu Konstruktoren.
//Deklaration der Funktionen und Konstruktoren der Klasse Grundstueck #include <iostream> #include <cstring> #include "Grundstueck.h" using namespace std; Grundstueck::Grundstueck() { cout << "\n" << "Basis konstr."; } Grundstueck::~Grundstueck() { cout << "\n" << "Basis destr."; } void Grundstueck::speichereGrunddaten(const char *n, int f, int st, int g) { strncpy(gemarkung, n, 29); flur=f; flurstueck=st; groesse=g; sachwert=static_cast<float>(g)*180; } void Grundstueck::zeigeGrunddaten()const { cout << "\n" << "Gemarkung: "<< gemarkung << endl << "Flur: " << flur << endl << "Flurstueck: " << flurstueck << endl << "Groesse: " << groesse<<endl << "Sachwert: " << sachwert; }
//Klassendeklaration der Klass Grundstueck #ifndef _GRUNDSTUECK_ #define _GRUNDSTUECK_ class Grundstueck { public: Grundstueck (); //Konstruktor ~Grundstueck(); //Dekonstruktor void speichereGrunddaten (const char *n, int f, int st, int g); void zeigeGrunddaten() const; private: char gemarkung[30]; int flur, flurstueck, groesse; protected: float sachwert; }; #endif
so wenn ich diese Funktionen jetzt in der main aufrufe funktioniert alles bestens.
nur leider sehe ich nur die ausgabe
Basis konstr
aber NET
Basis destr.
Warum net??? Laut meinen Buch sollte ich sie sehen
-
Der Code sollte so funktionieren. Den einzigen Fehler, den ich beim Drüberschauen sah, ist, dass du hier
#include "Schueler.h"
Schueler groß geschrieben hast, sonst immer nur klein. Mein G++ bestätigt mir, dass der Code einwandfrei läuft:
Alter des Schuelers: 0 IQ des Schuelers 0
-
Also das Programm müsste eigentlich funktionieren, bei mir tut es das. Beide Attribute sind dann 0!!
EDIT: ja du musst es wenn überall groß schreiben!!
-
Dein 2. Code hat auch keine Macke.
Füge vielleicht mal ein
std::endl;
an deine Ausgabe heran, damit es "geflusht" wird.
-
Hmm danke für die Rückmeldung. Tja ich weiss einfach net woran des liegt.
Naja mal kucken. Jetzt weiss ich wenigstens das es net an meinem Programm liegt.Edit :
ah habs gefunden ich hab systempause rausgenommen und
fflush(stdin);
getchar();einfügt. jetzt funktioniert es. Arg ich hasse solche Fehler.
-
[cpp]
#include <iostream>
#include "Schueler.h"
using namespace std;schueler::schueler() {
alter=0;
iq=0;
cout<< "Konstruktor wird aufgerufen" <<endl; //DAZUGEFÜGT
}
schueler::~schueler() {
cout<< "Dekonstruktor wird aufgerufen" <<endl; //DAZUGEFÜGT
}
void schueler::zeigedaten() {
cout << "Alter des Schuelers: " << alter << endl;
cout << "IQ des Schuelers " << iq << endl;
}
[/cpp]so ich hab aus dem ersten Beispiel mal was dazugefügt.
Warum sehe ich aber nur die meldung das der Konstruktor aufgerufen wird und nicht der Dekonstruktor. Oder geht des bei euch?
-
joa eben. das läuft alles. schau in deinem buch mal auf S. 184
cu
-
Jop. Wird beides sauber ausgegeben.
-
Jeder Compiler sollte hier den Destruktor der Klasse aufrufen. D.h. es kann nur daran liegen, dass du es nicht siehst. In meinem Posting oben habe ich ja schon bereits geschrieben, wie du es mal versuchen kannst.
-
Du meinst also so
#include <iostream> #include "Schueler.h" using namespace std; schueler::schueler() { alter=0; iq=0; cout<< "Konstruktor wird aufgerufen" <<endl; } schueler::~schueler() { cout<< "Dekonstruktor wird aufgerufen" <<std::endl; } void schueler::zeigedaten() { cout << "Alter des Schuelers: " << alter << endl; cout << "IQ des Schuelers " << iq << endl; }
so sehe ich es auch aber auch net. ich verwende des DEV C++ 4.9.9.0
-
tja, dann weiß ich auch nicht weiter. Teste es mal mit einem anderen. Muss aber gehen, du solltest es sehen. Ich habe hier diese IDE nicht, ich bezweifle aber, dass der MinGW etwas anderes macht.
-
Okay trotzdem danke nochmal.
-
ganz easy problem:
das programm ruft den destruktor am schluss auf, gibt aus und dann tut er bei deinem Programm nichts mehr
=> tastendruck einfügen
getch();//dann wartet er auf einen Tastendruck bevor er beendetps: ich würde gerne bei deien IDE Projekt mitarbeiten, hab dir eh schon eine e-mail geschreiben wurde aber irgendwie zurückgeschickt oder ist sie doch bei dir angekommen? (franz111@gmx.at)
-
FranzL. schrieb:
ganz easy problem:
das programm ruft den destruktor am schluss auf, gibt aus und dann tut er bei deinem Programm nichts mehr
=> tastendruck einfügen
getch();//dann wartet er auf einen Tastendruck bevor er beendetDas habe ich mir auch schon gedacht. Wer weiß, vielleicht liegs ja daran..
ps: ich würde gerne bei deien IDE Projekt mitarbeiten, hab dir eh schon eine e-mail geschreiben wurde aber irgendwie zurückgeschickt oder ist sie doch bei dir angekommen? (franz111@gmx.at)
Toll.
Nein, bei mir ist nichts von dir angekommen. Schicke es mal bitte nochmal. (siehe neue Kontaktmöglichkeiten auf der Page - es könnte sein, dass du noch an die Alte geschickt hast, die aber durch die neue Serverumstellung nicht mehr gültig ist.)
-
Ich hab hier nochmal eine Frage zu Konstruktoren und zwar von abgeleitenen. Ich versuche gerade des erlernte selber anzuwenden damit es weng besser sitzt.
Aber ich hab hier ein Problem und ich weiss net so genau woran des liegt. Ich schätze mal an der übergabe zwischen den einzelnen Konstrukoren.#ifndef _BASIS_ #define _BASIS_ class basis { private: double preis, menge; char name[40]; public: basis(); basis(double a, double b); ~basis(); void setpreis(); void setmenge(); void setname(); void getalldaten(); }; #endif
#include <iostream> #include <string> #include <iomanip> #include "basis.h" using namespace std; //SETMETHODEN void basis::setpreis() { cout << "Bitte geben Sie den Preis fuer den Artikel ein: "; cin >> preis; cout << endl; } void basis::setmenge() { cout << "Bitte geben Sie die vorhandene Lagermenge ein: "; cin >> menge; cout << endl; } void basis::setname() { cout << "Bitte geben Sie den Artikelnamen ein: "; cin >> name; cout << endl; } //GETMETHODEN void basis::getalldaten() { cout << "Artikelname = " << name << endl << "Preis des Artikels = " << preis << " Euro" << endl << "Lagermenge des Artikels = " << menge << " Stueck" << endl; } //KONSTRUKTOREN & DESTRUKTOREN basis::basis() { preis=0.0; menge=0.0; } basis::basis(double a, double b) { preis = a; menge = b; } basis::~basis() { }
#ifndef _FLUESSIG_ #define _FLUESSIG_ #include "basis.h" class fluessig : public basis { private: double liter; public: fluessig(); ~fluessig(); void setliter(); void getliter(); }; #endif
#include "fluessig.h" #include <iostream> using namespace std; void fluessig::setliter() { cout << "Bitte geben Sie die Liter des Produktes an: "; cin >>liter; } void fluessig::getliter() { cout << "Der Artikel enthaelt " << liter << endl; } fluessig::fluessig():basis() { liter=0; } fluessig::~fluessig() { }
mal ne Frage nebenei, habt ihr euch euer Wissen in Programmieren selber angeeignet oder auch durch Studium angeeignet. Würde mich nur mal interessieren.
-
Ich hoffe hier findet sich wer, der mir des leicht erklären kann. Ich checke des net so sehr.
-
Schüler schrieb:
Ich hab hier nochmal eine Frage zu Konstruktoren und zwar von abgeleitenen. Ich versuche gerade des erlernte selber anzuwenden damit es weng besser sitzt.
Aber ich hab hier ein Problem und ich weiss net so genau woran des liegt. Ich schätze mal an der übergabe zwischen den einzelnen Konstrukoren.Ähm.. Was hast du denn für ein Problem? Compiler-Fehlermeldung?
Bei mir treten keine auf. Nach logischen Fehler hatte ich aber keien Zeit zu suchen. Raten können wir leider nicht.mal ne Frage nebenei, habt ihr euch euer Wissen in Programmieren selber angeeignet oder auch durch Studium angeeignet. Würde mich nur mal interessieren.
Ich habe mir alles selber angeeignet. Aus Büchern und natürlich übers Internet. Studieren kann ich noch nicht, dazu bin ich noch zu jung. Steck grade mitten in der schriftlichen Prüfung der Realschule. (morgen Englisch Prüfung
)
-
okay habe das Problem gelöst. Ich hätte nur eine andere Frage ich mache deswegen mal kein neues Topic auf sondern schreibe es kurz hier rein, weil auch mein code hier drinnen steht.
abgeleitete Klasse verwendet Funktion aus Basisklasse -> okay das geht und ist klar
kann aber die verwendete Funktion noch eine Funktion aus der abgeleiten mit einbauen
wie z.b.
//Basisfunktion
void basis::getalldaten() { cout << "Artikelname = " << name << endl << "Preis des Artikels = " << preis << " Euro" << endl << "Lagermenge des Artikels = " << menge << " Stueck" << endl; }
abgeleitete Funktion
void fluessig::getliter() { cout << "Der Artikel enthaelt " << liter << endl; }
-
Verstehe zwar nich ganz. Aber ich denke du meinst es so, dass du eine neue Funktion in der abgeleitenen Klasse definieren willst. Klar geht das.