001
24.03.2006, 16:57 Uhr
CoolFire
|
Habe mein Problem mit Hilfe von gadfabelasr gelöst.
Zitat von gadfabelasr: |
hi,
wie soll das gehen? deine oberklasse hat gar keinen member des typs "person", nur eine funktion "eg", die den typ "person" zurückgibt :confused: wenn sie einen hat, dann wird deren konstruktor schon vor dem konstruktor der oberklasse aufgerufen. was du aber machen könntest ist
C++: |
class oberklasse { public: oberklasse(string name, int alter); private: person p; }
oberklasse::oberklasse( string name, int alter ): p(name, alter) { //wasauchimmer; }
|
was aber wahrscheinlich nicht gefragt ist, da du ja hier keine methode "erstelle person" haben kannst, denn die person wird schon am anfang erstellt.
was auch gemeint sein könnte, ist, dass du in der oberklasse einen zeiger auf eine person hast, der zunächst auf NULL, und erst nach aufruf von "erstellePerson" auf eine gültige person zeigt:
C++: |
class oberklasse { public: void oberklasse(){p = NULL;} void ~oberklasse(){ if(p) delete p;} //ganz wichtig.
void erstellePerson(string name, int alter) { p = new person(name, alter); } private: person *p; };
|
|
Meine Antwort:
Zitat von Cool_Fire: |
Hey gadfabelasr,
Die zweite Antwort war genau die, die ich gesucht habe, DANKE.
Eine Frage fällt mir jetzt noch ein. Wenn eigene Klassen Attribute von anderen Klassen sind, müssen diese dann immer als Pointer deklariert werden?
Ich habe deine Lösung mit in meinen Quellcode eingebastelt. Er läuft jetzt so wie von mir gewünscht.
Anhang: der korriegierte Quellcode.
Oberklasse.h
C++: |
//std c++ header #include "Person.h" #include <stdio.h> #include <stdlib.h> #include <iostream>
#ifndef Oberklasse_h #define Oberklasse_h Oberklasse_h
using namespace std;
class Oberklasse { public: //Konst / Dest Oberklasse(string name); ~Oberklasse();
//Attribute string getName(); Person *p; //Methoden void erstellePerson(string name, int alter); private: //Attribute string name; }; #endif
|
Oberklasse.cpp
C++: |
#include "Oberklasse.h"
#ifndef Oberklasse_cpp #define Oberklasse_cpp Oberklasse_cpp
Oberklasse::Oberklasse(string name){ this -> name=name; p = NULL; } Oberklasse::~Oberklasse(){ if(p) delete p; } //ganz wichtig.
void Oberklasse::erstellePerson(string name, int alter){ p = new Person(name, alter); } string Oberklasse::getName(){ return this -> name; } int main(int argc, char** argv){ // Erstellung einer neuen Oberklasse o Oberklasse o("MeineOberklasse"); // Erstellung eines neuen Objektes Person (Attribut des Objektes o) o.erstellePerson("Egon",34); // Ausgabe des Namens der Oberklasse cout <<"Name der Oberklasse: " << o.getName() << endl; // Ausgabe des Namens der Person in o cout <<"Name der Person: " << o.p -> name <<endl; // Ausgabe des Alers der Person in o cout <<"Alter der Person: " << o.p -> getAlter() << endl;
system("pause"); }
|
Person.h und Person.cpp wurden nicht verändert.
|
Dieser Post wurde am 24.03.2006 um 16:58 Uhr von CoolFire editiert. |