Methode an Funktion als Argument, in C++
Methode an Funktion als Argument, in C++
Hallo zusammen
Es geht um folgende Zeile Code:
Kommazahl = meineKlasse->text().nachFloat();
Der Rückgabewert von der Methode text() ist ein String und wird der Funktion nachFloat() als Argument übergeben. Das wundert mich, den ich kann bis jetzt, das ein Argument nur so übergeben wird an eine Funktion
nachFloat(meineKlasse->text()).
Die Frage ist jetzt: Wie kann man sowas selber programmieren, damit man das Argument so übergeben kann:
meineKlasse->text().nachFloat(); ?
Es geht um folgende Zeile Code:
Kommazahl = meineKlasse->text().nachFloat();
Der Rückgabewert von der Methode text() ist ein String und wird der Funktion nachFloat() als Argument übergeben. Das wundert mich, den ich kann bis jetzt, das ein Argument nur so übergeben wird an eine Funktion
nachFloat(meineKlasse->text()).
Die Frage ist jetzt: Wie kann man sowas selber programmieren, damit man das Argument so übergeben kann:
meineKlasse->text().nachFloat(); ?
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Methode an Funktion als Argument, in C++
text() muss einen Datentyp liefern, den Du bearbeiten darfst, darf also kein std::string sein. Diese Klassen darf sich natürlich wie ein Standard-String verhalten.
Code: Alles auswählen
class MyString : public std::string // MyString ist ein std::string und erweitert diesen
{
public:
MyString( std::string const & str )
: std::string( str )
{}
float nachFloat() const
{
return atof( c_str() );
}
};
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Methode an Funktion als Argument, in C++
Soweit bin ich gekommen:
Ich bekomme einfach die Fehlermeldung in dieser Zeile nicht weg:
Gewünscht ist ja, dass der Rückgabewert von text(), an nachFloat() übergeben wird.
Code: Alles auswählen
#include <iostream>
using namespace std;
class MyString : public std::string
{
public:
MyString( std::string const & str )
: std::string( str )
{}
float nachFloat() const
{
return atof( c_str() );
}
};
class MyFloatstring
{
public:
const char* text()
{
return "3.3";
}
};
int main()
{
MyString *myString = new MyString("66.1");
MyFloatstring *meineKlasse = new MyFloatstring();
double zahl = 0;
zahl = meineKlasse->text().nachFloat();
cout << zahl << endl;
delete myString;
delete meineKlasse;
return 0;
}
Code: Alles auswählen
zahl = meineKlasse->text().nachFloat();
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Methode an Funktion als Argument, in C++
Dann sollte text() in MeineKlasse einen Datentyp zurückgeben, der nachFloat() kennt. Zum Beispiel MyString.

Ich vermute aber eher, dass Du sowas hier machen willst:
Code: Alles auswählen
int main()
{
MyString myString("66.1"); // Wenn wir das new lassen, sparen wir uns später das Delete
// MyFloatstring *meineKlasse = new MyFloatstring();
float zahl = 0; // <- hier machen wir ein float statt double draus
zahl = myString->nachFloat();
cout << zahl << endl;
// delete myString;
// delete meineKlasse;
return 0;
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Methode an Funktion als Argument, in C++
Code: Alles auswählen
float zahl = 0; // <- hier machen wir ein float statt double draus

Nein ich habe das so gemeint wie ich das geschrieben habe am Anfang:
meineKlasse->text() liefert eine Zeichenkette die dann nachFloat() als Argument erhält. Ich weiß zwar nicht wie das geht, aber wundern tue ich mich trotzdem.Kommazahl = meineKlasse->text().nachFloat()
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Methode an Funktion als Argument, in C++
Dann muss "meineKlasse" bei text() eben auch den Datentyp MyString zurückgeben. char const * kann nix.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Methode an Funktion als Argument, in C++
Danke Xin, aber wie erhält jetzt nachFloat() ein Argument? So geht es ja jetzt nicht mehr:
Code: Alles auswählen
class MyFloatstring
{
public:
MyString text()
{
return "2.33;
}
};
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Methode an Funktion als Argument, in C++
Wenn Du noch ein Anführungszeichen dazu packst, dann geht das genau so.Xeon hat geschrieben: ↑Do Okt 13, 2022 3:26 pmDanke Xin, aber wie erhält jetzt nachFloat() ein Argument? So geht es ja jetzt nicht mehr:Code: Alles auswählen
class MyFloatstring { public: MyString text() { return "2.33; } };
Moment... Dein MyString braucht noch einen Konstruktor, der den Text weiterleitet:
Code: Alles auswählen
MyString::MyString( char const * text )
: std::string( text ) {}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Methode an Funktion als Argument, in C++
Oh wie peinlich, habe ich vergessen.Xin hat geschrieben: ↑Do Okt 13, 2022 3:29 pmWenn Du noch ein Anführungszeichen dazu packst, dann geht das genau so.Xeon hat geschrieben: ↑Do Okt 13, 2022 3:26 pmDanke Xin, aber wie erhält jetzt nachFloat() ein Argument? So geht es ja jetzt nicht mehr:Code: Alles auswählen
class MyFloatstring { public: MyString text() { return "2.33; } };

Vielen Dank Xin, jetzt geht es! Ich stelle den Code nochmal rein, aber diesmal die Variante ohne Zeiger:Xin hat geschrieben:Moment... Dein MyString braucht noch einen Konstruktor, der den Text weiterleitet:Edit 2: Hat er mit std::string ja quasi schon.Code: Alles auswählen
MyString::MyString( char const * text ) : std::string( text ) {}
Code: Alles auswählen
#include <iostream>
using namespace std;
class MyString : public std::string
{
public:
MyString( char const * text )
: std::string( text ) {}
float nachFloat() const
{
return atof( c_str() );
}
};
class MyFloatstring
{
public:
MyString text()
{
return "2.33";
}
};
int main()
{
MyString myString("66.1");
MyFloatstring meineKlasse;
float zahl = 0;
zahl = meineKlasse.text().nachFloat();
cout << zahl << endl;
return 0;
}