Funktionsparameter



  • Hallo,

    hab mal ganz einfache Frage. Und Zwar habe ich eine Klasse namens PC, in welcher Funktionen vorhanden sind. Die Fkt. sind Implementiert. Wenn ich meine Funktionen in mein Hauptprogramm einbinden will, bekomm ich Probleme mit den Funktionsparametern 😕 . Scheinbar bin ich zu dumm dafür, aber ich bekomms einfach nicht hin. Hier ist noch mein Quelltext zur verdeutlichung:

    #include<iostream.h>
    #include<conio.h>
    
    class pc//Klasse PC
    {
      private:
    
      public://Preisfkt.
      float ekp_board(float);
      float ekp_graka(float);
      float ekp_floppy(float);
      float ekp_harddisk(float);
      float ekp_cpu(float);
      float ekp_cd(float);
      float ekp_cdr(float);
      pc();
      ~pc();
    };
    
    pc::pc()
    {
     cout<<"PC kann zusammengestellt werden!\n";
    }
    
    float pc::ekp_graka(float ekpg)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer Grafikkarte eingeben:\n";
     cin>>ekpg;
    }
    
    float pc::ekp_floppy(float ekpf)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer Floppy eingeben:\n";
     cin>>ekpf;
    }
    
    float pc::ekp_harddisk(float ekphd)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer Harddisk eingeben:\n";
     cin>>ekphd;
    }
    
    float pc::ekp_cpu(float ekpcpu)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer CPU eingeben:\n";
     cin>>ekpcpu;
    }
    
    float pc::ekp_cd(float ekpcd)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer CD-ROM eingeben:\n";
     cin>>ekpcd;
    }
    
    float pc::ekp_cdr(float ekpcdr)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer CD Brenner eingeben:\n";
     cin>>ekpcdr;
    }
    float pc::ekp_board(float ekpb)
    {
     clrscr();
     cout<<"Bitte Einkaufpreis fuer Board eingeben:\n";
     cin>>ekpb;
    }
    
    pc::~pc()
    {
     clrscr();
     cout<<"Pc wurde geloescht";
    }
    
    int main() //Hauptprogramm
    {
     char weiter,e='n';
     int auswahl;
     pc testpc;
     do
     {//do beginn
     clrscr();
     cout<<"--------------------------------------------------\n";
     cout<<"\nHier kannst du deinen eigenen PC zusammenstellen\n\n";
     cout<<"1. Einen PC zusammenstellen\n";
     cout<<"2. PC loeschen\n";
     cout<<"3. Beenden\n";
     cin>>auswahl;
       switch(auswahl)
       {//switch beginn
       case 1:
         testpc.ekp_board(float ekpb);//Ausdruckssyntax
         testpc.ekp_board();//logischerweise zu wenig Parameter
         /*testpc.ekp_cpu();
         testpc.ekp_harddisk();
         testpc.ekp_graka();
         testpc.ekp_floppy();
         testpc.ekp_cd();
         testpc.ekp_cdr();*/
         break;
       case 2:
         testpc.~pc();
         break;
       case 3:
         clrscr();
         cout<<"Wirklich Beenden? j/n\n";
         cin>>e;
         break;
       default:
         clrscr();
         cout<<"Ungueltige Eingabe!\n";
         break;
       }//switch ende
     if(e!='j')
     {
     cout<<"\n\nZurueck zum Hauptmenue? j/n\n";
     cin>>weiter;
     }
     else{}
     }//do ende
     while(weiter=='J'|weiter=='j');
     testpc.~pc();
    } //hauptprogramm ende
    

    Ich hab die Stelle nochma mit Kommentiert!
    Ich Danke schon mal im Vorraus! 🙂



  • Du willst die Funktionen ohne Parameter aufrufen, deklarierst sie aber mit
    einem Float Parameter.
    Entweder entfernst du denn Parameter in den Funktionen und Deklerationen, oder
    du übergist einen Dummy-Float wie z.B. 0.0



  • Danke hat funktioniert! 😃



  • Den Destructor ruft man nicht selber auf, das geschieht automatisch wenn das Objekt zerstört wird (in diesem Fall am Ende der main).



  • klar ruft man destruktoren auf!
    (nur halt hier lohnt sich es net)

    MFG

    LordHoto



  • Nein.

    Man ruft höchtens delete auf. Das wäre hier aber auch falsch.



  • klar ruft man destruktoren auf!

    Es gibt nur eine Ausnahme in der man Destruktoren von Hand aufruft. Und die hier zu diskutieren ist beim gegenwärtigen Kentnisstand des OPs völlig sinnlos.



  • des OPs?



  • Hallo,

    Es gibt nur eine Ausnahme in der man Destruktoren von Hand aufruft. Und die hier zu diskutieren ist beim gegenwärtigen Kentnisstand des OPs völlig sinnlos.

    Meinst du z.B. Klassen, die Referenzen zählen und intern delete this aufrufen, sobald keine Referenzen mehr auf eine Instanz von dieser zeigen oder wirklich, das bei einem auf dem Stack angelegtem Object der Destruktor explizit aufgerufen werden muss.

    mfg th3law



  • des OPs?

    http://www.snafu.priv.at/jargon/html/entry/OP.html

    Meinst du z.B. Klassen, die Referenzen zählen und intern delete this aufrufen

    Nein. Das ist kein expliziter Aufruf des Destruktors.

    Ein expliziter Destruktoraufruf hat die Form: obj.~KlassenName(); und ist nur dann von Nöten, wenn das Objekt über ein placement-new-Aufruf konstruiert wurde (ob auf dem Stack oder Heap ist dabei wurscht).

    Aber das spielt hier alles eigentlich gar keine Rolle.


Anmelden zum Antworten