Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Mehrere Objekte vom User erstellen lassen / Aufruf von Methoden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.12.2004, 20:50 Uhr
~Hafrel
Gast


Hallo,

Ich hab zwei Probleme bei der Realisierung meines Programms.

Der User soll selbst waehlen koennen wieviel objekte angelegt werden...
Hierzu fand ich folgende Zeile welche das ganze bewerkstelligt (in einer for-schleife mit num als zaehler z.b.)

C++:
#include <mein_headerfile>
int main()
{
...
automobil* objects = new automobil[num]; // erzeugt num objekte
...
}


das klappt auch anscheinend...nur wie greif ich dann in der klasse auf diese objekte zu?


C++:
objects[num].name;



z.b. funktioniert nicht...

ich muss auch gestehen das ich den Vorgang von automobil* objects = new automobil[num]; nicht ganz nachvollziehen kann...
letzendlich plage ich mich schon seit 2 Tagen damit rum und ein Bekannter hat mir den codeschnipsel gegeben um sich direkt danach nicht mehr auffinden zu lassen, weshalb ich nun euch löchere



2. Frage...

Wie bewerkstellige ich es am kluegsten wenn ich in einer routine/methode von Klasse A, eine routine bzw eine methode in Klasse B aurufen will?


Vielen Dank schonmal und entschuldigt eventuellen Dilletantismus...Dies ist meine 2. Woche mit C++

Hafrel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.12.2004, 21:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn deine klasse automobil ne membervariable name hat (und diese public ist)sollte das gehen... problem bei der sache wird vermutlich sein das du so nur den defaultkonstruktor deiner klasse aufrufen kannst...

also z.b. sowas wie

C++:
automobil* objects = new automobil(4711)[num];


geht nicht...

dazu müsstest du dann sowas wie...


C++:
automobil** objects = new automobil*[num];
for(int i=0;i<num;++i) automobil[i] = new automobil(4711);



kannst du allerdings auch alles einfacher haben indem du z.b. ne stl-klasse verwendest...



Zitat:

Wie bewerkstellige ich es am kluegsten wenn ich in einer routine/methode von Klasse A, eine routine bzw eine methode in Klasse B aurufen will?



hängt von der problemstellung ab... nicht vergessen nicht objekte und klassen verwechseln... objekte sind konkrete instanzen deiner klasse...


ich verschieb dich mal ins ansi-c/c++ forum da deine frage bisher nicht os abhängig ist...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.12.2004 um 21:02 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.12.2004, 21:12 Uhr
~Hafrel
Gast


Danke ich teste das später gleichmal nachdem der Teller leer ist


Zitat:

hängt von der problemstellung ab... nicht vergessen nicht objekte und klassen verwechseln... objekte sind konkrete instanzen deiner klasse...



Also Ich habe Zwei Klassen...irgendwann kommt der User in Klasse A mit dem Objekt X dieser Klasse an den Punkt wo er eine bestimmte funktion aufrufen kann, diese funktion steht aber in Klasse B...

einfach mal den passenden code schnipsel:


C++:
            switch(choice)
            {
                
            case 'A':
                
                cout<<"Wieviel Kilometer moechten Sie mit dem Fahrzeug bei Verbrauch: "<<verbrauch<<" zuruecklegen?"<<endl;
                cout<<"Eingabe: ";
                cin>>strecke;
                kmstand+=strecke;
                tankinhalt-=(strecke*(verbrauch/100));
                
                break;
                
                
            case 'B':
                
                //    tankstelle.gibt_aus();
                
                break;
                
                
            default:
                cout<<"Falsche Eingabe!"<<endl;
                break;
                
            }



Klasse B ist Tankstelle...und die funktion bzw Methode ist gibt_aus();

Ich hoffe ich konnte es damit anschauchlich machen...

Danke nochmal
Hafrel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.12.2004, 21:22 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


tankstelle direkt kann ja nicht ausgeben sondern du musst eine instanz deiner klasse tankstelle erzeugen... was auch immer die genau ausgeben soll... (ich seh da ehrlich gar nicht den zusammenhang mit dem PKW ,mal davon abgesehen das er da vielleicht tankt )
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.12.2004, 21:49 Uhr
~Hafrel
Gast


Ja richtig! Er Tankt!!

und ausgegeben werden in dem sinn soll ja nichts...dat teil heist einfach gibt_aus


C++:
class tankstelle
{
    
protected:
    
    float liter;
    float tankinhalt_tanke;
    string name;
    
public:
    
    tankstelle()
    {
        tankinhalt_tanke=0;
    }
    
    ...

       ...
    
    
    float gibt_aus()
    {
        tankinhalt_tanke-=liter;
// und noch viel mehr wilder code den ich aber nicht komplett posten will :)
    }
    
    
};





aber ich glaub ich pack gibt_aus() einfach wieder in automobil...dann haette sich das auch...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.12.2004, 21:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

aber ich glaub ich pack gibt_aus() einfach wieder in automobil...dann haette sich das auch...


äh würde ich doch auch stark empfehlen... der tank samt inhalt ist doch recht eindeutig ein teil des autos und hat mit der tankstelle direkt nicth soviel zu tun... den tank als teil der tankstelle zu modellieren halte ich für ne ziemlich schräge idee...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.12.2004, 23:55 Uhr
(un)wissender
Niveauwart


Man könnte die blonde Tanktussi auch als Teil des Wagens modellieren, nämlich auf dem Rücksitz.

Ah, da war er wieder, mein dunkler Bruder, sorry...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.12.2004, 07:00 Uhr
Spacelord
Hoffnungsloser Fall


Ich interpretiere tankinhalt_tanke eher als den Vorratsbehälter der Tankstelle und der hat ja numal garnichts in der Klasse Auto zu suchen.
Das Attribut liter der Klasse Tankstelle erscheint mir auch überflüssig.Das sollte wohl eher ein Parameter von gibt_aus() sein.
Wenn die Klasse Auto ne Methode tanken hat musst du innerhalb dieser Methode ein Tankstellen Objekt zur Verfügung haben.Wenn es mehrere gibt kannst du ja ne Referenz als Parameter übergeben...


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.12.2004, 13:00 Uhr
~Hafrel
Gast


so ich hab jetzt das ganze mal mit vector gemacht:


C++:
cout << "Wieviele Objekte: ";
int num;
cin >>num;

std::vector<automobil> objects;

for(int i = 0; i < num; ++i)
    {
    automobil fahrzeug;
    objects.push_back(fahrzeug);
    }




allerdings steh ich hier auch wieder vor meiner alten Frage...wie greife ich dann konkret auf attribute/methoden der einzelnen objekte zu?...die muessen ja irgendeinen index bekommen haben...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.12.2004, 13:21 Uhr
Spacelord
Hoffnungsloser Fall


Wenn die Anzahl der Autos erstmal bekannt ist halte ich einen vector für unnötig.
Als kleines Beispiel dass nur die angesprochenen Probleme umsetzt kannst du dir ja das mal anschauen.
Die initialisierung der Autoobjekte in main setzt dabei voraus das mindestens 2 Autos angelegt werden sollen.Ist halt besser zu verstehen wenn ich den Objekten konkrete Namen gebe anstatt in ner Schleife "Standardobjekte" zu erzeugen.
Ist nicht perfekt aber sollte dir weiterhelfen.


C++:
#include <iostream>
#include <string>
using namespace std;


class tankstelle
{
private:
    int benzinvorrat;
public:
    tankstelle(int);
    int getBenzinvorrat()const{return benzinvorrat;}
    int gibt_aus(int);
};


tankstelle::tankstelle(int startmenge)
{
    benzinvorrat=startmenge;
}

int tankstelle::gibt_aus(int liter)
{
    if(liter<=benzinvorrat)
    {
        benzinvorrat -= liter;
        return liter;
    }
    else
    {
        int temp=benzinvorrat;
        benzinvorrat=0;
        return temp;
    }
}


class Auto
{
private:
    string name;
    int tankinhalt;

public:
    Auto();
    Auto(string,int );

    string getName()const{return name;}
    int getTankinhalt()const{return tankinhalt;}
    void tanken(tankstelle&,int);
};


Auto::Auto(string n,int t)
{
    name=n;
    tankinhalt= t;
}

void Auto::tanken(tankstelle& tanke,int lit)
{
    tankinhalt += tanke.gibt_aus(lit);
}


int main()
{
    int i;
    cout<<"Wieviele Autos? :";
    cin>>i;
    tankstelle BP(67);
    Auto** dieAutos = new Auto*[i];

    //Achtung hier setze ich jetzt für Demozwecke einfach voraus dass
    // i mindestens 2 ist!!
    dieAutos[0]=new Auto("Audi A3",5);
    dieAutos[1]=new Auto("Porsche 911",20);

    cout<<dieAutos[0]->getName()<<'\t'<<dieAutos[0]->getTankinhalt()<<endl;
    cout<<dieAutos[1]->getName()<<'\t'<<dieAutos[1]->getTankinhalt()<<endl;
    cout<<"Benzinvorrat der Tankstelle: "<<BP.getBenzinvorrat()<<endl;

    cout<<"\n\nDer Audi will 30 Liter tanken.\n";
    dieAutos[0]->tanken(BP,30);
    cout<<dieAutos[0]->getName()<<'\t'<<dieAutos[0]->getTankinhalt()<<endl;
    cout<<"Benzinvorrat der Tankstelle: "<<BP.getBenzinvorrat()<<endl;

    cout<<"\n\nDer Porsche will 50 Liter tanken.\n";
    dieAutos[1]->tanken(BP,50);
    cout<<dieAutos[1]->getName()<<'\t'<<dieAutos[1]->getTankinhalt()<<endl;
    cout<<"Benzinvorrat der Tankstelle: "<<BP.getBenzinvorrat()<<endl;

    return 0;
}






MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: