Rückgabe für eigenen Datentyp

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Codiac
Beiträge: 21
Registriert: 23. Mai 2013 11:00

Rückgabe für eigenen Datentyp

Beitrag von Codiac »

Hallo zusammen,

Ich wüsste gerne, wie ich eine "methodenlose" Rückgabe für eigene Datentypen programmieren kann.
Meine Klasse...

Code: Alles auswählen

class myClass
{
public:
               myClass(const QString &value);
    QString    getValue(void);

private:
    QString    curValue;
};

myClass::myClass(const QString &value)
{
    curValue = value;
}

QString myClass::getValue()
{
    return(curValue);
}
...rückt den Wert momentan nur so raus:

Code: Alles auswählen

myClass str = "Hallo!";
QMessageBox::information(0, "", str.getValue());
Ich hätte aber gerne ein Handling ohne getValue(), wie bspw. bei einem QString:

Code: Alles auswählen

QString str = "Hallo!";
QMessageBox::information(0, "", str);
Was fehlt meiner Klasse dazu?

Grüße,
Codiac
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Rückgabe für eigenen Datentyp

Beitrag von Christian81 »

Es fehlt der operator()

Code: Alles auswählen

QString operator()()const { return curValue; }
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Codiac
Beiträge: 21
Registriert: 23. Mai 2013 11:00

Re: Rückgabe für eigenen Datentyp

Beitrag von Codiac »

Danke Christian! Das bringt mich schon mal einen Schritt weiter.
Der folgende Code funktioniert:

Code: Alles auswählen

myClass val("123,45");
QString out = val();
Ich möchte meine Instanz aber gerne ohne Klammern benutzen. Dabei erhalte ich die folgende Fehlermeldung:

Code: Alles auswählen

myClass val("123,45");
QString out = val;

conversion from 'myClass' to non-scalar type 'QString' requested
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: Rückgabe für eigenen Datentyp

Beitrag von archer »

Da müsste der Operator anders aussehen:

Code: Alles auswählen

operator QString() const;

Code: Alles auswählen

myClass::operator QString() const
{
    return curValue;
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Rückgabe für eigenen Datentyp

Beitrag von Christian81 »

Das käme einen impliziten cast gleich und ist meiner Meinung nach unschöner Code denn man versteckt so, was wirklich passiert, ebenso bei operator() wie von mir vorgeschlagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Rückgabe für eigenen Datentyp

Beitrag von RHBaum »

Das käme einen impliziten cast gleich und ist meiner Meinung nach unschöner Code denn man versteckt so, was wirklich passiert, ebenso bei operator() wie von mir vorgeschlagen.
richtig !

Und genau deswegen sollte auch auch der Konstruktor mit const QString & explizit sein !

myClass val("123,45"); // Das ist ok

QString strX("123,45");
myclass val = strX; // das sollte nicht ok sein .... obwohl hier noch ersichtlich ist was passiert

void foo(myclass value);
foo("123,45"); // das ist eher kritisch

Es sei denn deine Klasse myclass soll wirklich ein String Ersatz sein ...
(nur) dann sollte man aber auch die 3 Konvertierungs - Funktionalitaeten implementieren:
Konvertierung Konstruktor: Class::Class(const T &);
Konvertierung Zuweisung Class & Class::operator = (const T &);
und Konvertierungs Operator Class::operator T ();

Ciao ...
Antworten