Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
class MeineKlasse
{
public:
int gib4() { return 4; }
int gib9() { return 9; }
};
...
MeineKlasse k;
int i;
i = k.gib4(); //i ist jetzt natürlich 4
i = k.gib9(); //i ist jetzt natürlich 9
i = k; //das ergibt aber einen Compilerfehler, weil ein Objekt von MeineKlasse in kein int reinpasst
class MeineKlasse
{
public:
int gib4() { return 4; }
int gib9() { return 9; }
operator int() { return 10; }
};
...
MeineKlasse k;
int i;
i = k.gib4(); //i ist jetzt natürlich 4
i = k.gib9(); //i ist jetzt natürlich 9
i = k; //i ist jetzt 10
i = k; //Compilerfehler trotz Operator
i = (int)k; //Jetzt gehts, weil man mit dem Cast nochmal sagt dass es jetzt als int gebraucht wird.
Hi
ein Typoperator einer Klasse bewirkt, dass Objekte dieser Klasse auch als Werte von diesem Typ "verstanden" werden können.
Beispiel ohne zuerst:
Beispiel mit:C++:class MeineKlasse { public: int gib4() { return 4; } int gib9() { return 9; } }; ... MeineKlasse k; int i; i = k.gib4(); //i ist jetzt natürlich 4 i = k.gib9(); //i ist jetzt natürlich 9 i = k; //das ergibt aber einen Compilerfehler, weil ein Objekt von MeineKlasse in kein int reinpasst
k ist zwar noch immer ein Klassenobjekt, von dem man Methoden aufrufen kann usw., aber falls man es wie eine int-Variable verwenden will geht das jetzt auch. Welchen Wert es haben soll wird durch den operator int bestimmt (der auch eine volle Methode ist, nur mit einem speziellen Namen. Also der Wert muss nicht fix sein oder so, man kann drin alles machen, es muss am Schluss nur ein int returnt werden).C++:class MeineKlasse { public: int gib4() { return 4; } int gib9() { return 9; } operator int() { return 10; } }; ... MeineKlasse k; int i; i = k.gib4(); //i ist jetzt natürlich 4 i = k.gib9(); //i ist jetzt natürlich 9 i = k; //i ist jetzt 10
Wann man das machen soll? Ganz einfach, wann es Sinn macht Hast du eine Klasse, die vom Sinn her einen Wert darstellt und mit anderen "normalen" Werte direkt verrechnet werden soll etc.? ...
...
extern "C"
{
typedef void (* _IMQSspServiceBase_FetchedFunction)(...);
}
...
class IMQSspServiceBase
{
public:
class SspFunction
{
public:
SspFunction(const char * publicName,const char * name)
throw();
operator _IMQSspServiceBase_FetchedFunction(void)
throw(OS390_BASE_EX_BASE);
private:
SspFunction(
const SspFunction &)
throw(); // not allowed
void operator = (const SspFunction &)
throw(); // not allowed
...
inline
IMQSspServiceBase::SspFunction::
operator _IMQSspServiceBase_FetchedFunction(void)
throw(OS390_BASE_EX_BASE)
{
TC_TRACE_ENTER(OS390_BASE_TRC_GRP, this, "IMQSspServiceBase::"
"SspFunction::operator _IMQSspServiceBase_FetchedFunction");
if (m_fct == 0)
{
fetch();
}
...
Aber stimmt meine Annahme ansonsten? Also ausser ob es implizit oder explizit ist?Die eigentliche Verwendung zeigst du nicht, daher weiß ich nicht ob es implizit oder explizit ist.
Aber prinzipiell möglich ist es damit, ja.
P.S: Bei explizit muss man doch "explicit" angeben oder?
Ob es ohne Cast auch geht, also wenn man den Compiler das zusammensuchen lässt, hängt von "explicit" ab (mit explicit = geht nicht).
Genau genommen ist es semantisch nicht einmal eine Typumwandlung, sondern nur syntaktisch (wie man eine Klasse semantisch auf eine Funktion wandeln können soll, ist mir schleierhaft (und übrigens auch recht hässlich)).Ich meine, es konvertiert die Klasse IMQSspServiceBase zu _IMQSspServiceBase_FetchedFunction(void) auf die Objekte von IMQSspServiceBase::SspFunction zugreifen zu können.
Aber ich bin noch ziemlich neu in dem Gebiet.. Das ist doch implizite Typumwandlung oder?
int a = (int)'abc'; //explizit (d.h. mit cast)
int b = 'abc'; //Implizit: Der Standard sagt, dass Zeichenliterale int sind.