Eigene Klasse erstellt aber wie benutzen?hilfe!



  • Hallo zusammen
    ich programmiere gerade einen Währungsrechner mit borland c++ 6.0 und muss dafür eine eigene klasse hinzufügen also nicht nur die automatisch erstellten sachen verknüpfen.
    ich habe dafür eine klasse mit einer umrechnungsfunktion geschrieben. die klasse ist im header-file definiert die funktion im cpp-file geschrieben. Nun habe ich das problem dass ich die funktion bei einem buttonklick ausführen will dies aber nicht funktioniert. der button klick funktioniert weil es in der klasse TForm1 ist jedoch gehts dann nicht mehr weiter mit meiner funktion welche in der klasse TUmrechnung ist. kann mir bitte schnell jemand sagen wie dies funktioniert dass auch die funktion dann ausgeführt wird?
    ausserdem würde ich gerne wissen ob ich so korrekt einen text in einer anderen klasse ausgebe : Form1 -> Edit2 -> Text = ((Form1 -> Edit1 -> Text)*Kurs); ?

    Vielen Dank schon im voraus
    cedi

    PS: bitte in normaler sprache antworten bin neuling und habe nur ganz kleine grundkenntnisse ;-D

    header-file:

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    int Button =0;
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TLabel *Label1;
            TEdit *Edit1;
            TEdit *Edit2;
            TComboBox *ComboBox1;
            TComboBox *ComboBox2;
            TButton *Button1;
            void __fastcall Button1Click(TObject *Sender);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    
    class TUmrechnung
    {
     private:
               String Waehrung_Start;
               String Waehrung_Ziel;
               int Kurs;
     public:
     void __fastcall umrechnen();
    
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    cpp-file:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     Button=1;
    }
    //---------------------------------------------------------------------------
    
    //---------------------------------------------------------------------------
    void __fastcall TUmrechnung::umrechnen()  //In andere Währung umrechnen
    {
    
     if(Button==1)
            {
            Waehrung_Ziel = Form1 -> ComboBox2 -> Text;  //Ausgangswährung einlesen
            Waehrung_Start = Form1 -> ComboBox1 -> Text;  //Zielwährung einlesen
    
            //Währungen abfragen und Kurs bestimmen
    
            if(Waehrung_Start == "EUR")
                    {
                            if(Waehrung_Ziel == "CHF")
                            {
                                    Kurs=1.2;
                            }
                    }
    
             if(Waehrung_Start == "EUR")
                    {
                            if(Waehrung_Ziel == "EUR")
                            {
                                    Kurs=1;
                            }
                    }
    
              if(Waehrung_Start == "CHF")
                    {
                            if(Waehrung_Ziel == "EUR")
                            {
                                    Kurs=0.83;
                            }
                    }
    
               if(Waehrung_Start == "CHF")
                    {
                            if(Waehrung_Ziel == "CHF")
                            {
                                    Kurs=1;
                            }
                    }
               Form1 -> Edit2 -> Text = ((Form1 -> Edit1 -> Text)*Kurs);
            }
    }
    


  • Hi,

    fangen wir mal hier an:

    Form1 -> Edit2 -> Text = ((Form1 -> Edit1 -> Text)*Kurs); ?
    

    Du versuchst mit Text zu rechnen, der Datentyp zum rechnen sollte aber etwas sein was Zahlen verarbeiten kann, z.B. double. Also ändere das so:

    Form1 -> Edit2 ->Text = Form1 -> Edit1 -> Text.ToDouble() * Kurs;
    

    Dann hast Du im Header int als Datentyp für den Kurs festgelegt, versuchst aber Kurse mit Nachkommastellen zu nutzen, deshalb hier auch double als Datentyp.

    class TUmrechnung
    {
     private:
               String Waehrung_Start;
               String Waehrung_Ziel;
               double Kurs;
     public:
     void __fastcall umrechnen();
    

    Den int Button habe ich entfernt und auch die Abfrage

    // if(Button==1) 
    //        {
    

    Abschliessendes } nicht vergessen!

    In der Button Methode kannst Du dann das Ganze so aufrufen:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       TUmrechnung n;
       n.umrechnen();
    }
    

    Ich hoffe das reicht Dir fürs Erste

    Gruß myerscola



  • Super funktioniert nun einwandfrei!! vielen dank 😃



  • kannst du mir vielleicht noch erklären was das genau macht oder für was es steht?

    TUmrechnung n;
       n.umrechnen();
    


  • Es wird eine konkrete Instanz namens n der abstrakten Klasse TUmrechnung erstellt.
    Für diese Instanz wird die Klassenfunktion (aka 'Methode') umrechnen aufgerufen.

    Ein Grundlagenkurs zur objektorientierten Programmierung dürfte wohl zu empfehlen sein.



  • Jansen schrieb:

    Es wird eine konkrete Instanz namens n der abstrakten Klasse TUmrechnung erstellt.
    ...

    Wie kommst du hier auf abstrakt ?



  • 'Abstrakt' einfach als Gegensatz zu 'konkret'.
    Aber du hast recht, das könnte missverständlich sein, da es ja auch echte abstrakte Klassen gibt.


Anmelden zum Antworten