Klasse string vererben

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Klasse string vererben

Beitrag von cloidnerux » So Jun 28, 2009 5:24 pm

Also, ich habe für ein kleines OpenGL objekt mir eine klasse geschriben mit der men einen String ausgeben soll.
Weil ich nicht immer aufrufe wie

Code: Alles auswählen

meinObjekt.Text("Hallo Welt");
haben wollte, habe ich kurzerhand die Klasse string Vererbt.
Compiler meldet keine Fehler, doch wenn ich versuche über

Code: Alles auswählen

meinObjekt = "Hallo Welt!";
Meldet er mir immer:
error: no match for 'operator=' in 'meinObjekt = "Hallo Welt!"
Woran kann das liegen?

MfG cloidnerux
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Klasse string vererben

Beitrag von nufan » So Jun 28, 2009 5:34 pm

Kurz: Zuweisungsoperator wird nicht vererbt.
Für eine Lösung wäre die Klasse nicht schlecht ;)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Klasse string vererben

Beitrag von cloidnerux » So Jun 28, 2009 8:06 pm

Für eine Lösung wäre die Klasse nicht schlecht ;)
Ich nehme mal an meine:

Code: Alles auswählen

class glString : public std::string
{
    private:
       unsigned short posX, posY;
       HFONT font, oldfont;
       GLuint base;
    public:
       glString();
       glString(int positionX, int positionY);
       glString(int widht, int height, std::string fontName);
       glString(std::string fontName);
       ~glString();
       void Init();
       void Draw();
};
Ist es überhaupt möglich bestimmte Funktionen und Operatorüberladungen nicht vererbbar zu machen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Klasse string vererben

Beitrag von nufan » So Jun 28, 2009 8:57 pm

Sorry, so gut kenn ich mich leider auch nicht aus :)

Ich würde Folgendes machen:
In glString eine Instanz von string. Den Zuweisungsoperator für glString so überladen, dass der übergebene Text direkt an die string-Instanz weitergegeben wird.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Klasse string vererben

Beitrag von Dirty Oerti » Mo Jun 29, 2009 1:55 pm

Äh...ich bin mir nicht total sicher, aber ich denke so in der Art müsste es doch gehen... :)

Code: Alles auswählen

class dings
{
 // blabla

public:
  dings operator= (char * nur_text);
  dings operator= (dings dasda)

}


dings dings::operator= (char *nur_text)
{
   this.text(nur_text);
   return this;
}
*edit* Achso, jetzt versteh ich das Problem erst^^ Warum muss es denn ein Erbe von string sein? Wäre es nicht sowieso klüger, einfach nur ein string als Memberelement deiner Klasse zu nehmen (wie dani93 schon meinte :) ) ?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Klasse string vererben

Beitrag von cloidnerux » Mo Jun 29, 2009 3:55 pm

*edit* Achso, jetzt versteh ich das Problem erst^^ Warum muss es denn ein Erbe von string sein? Wäre es nicht sowieso klüger, einfach nur ein string als Memberelement deiner Klasse zu nehmen (wie dani93 schon meinte :) ) ?
Im grunde genommen ja, aber dann müsste man sich entweder selber die Operatoren überladen oder Funktionen schreiben und da hab ich mir gedacht. "Warum das ganze, wenn ich das doch alles von string erben könnte"
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Klasse string vererben

Beitrag von Dirty Oerti » Mo Jun 29, 2009 4:00 pm

cloidnerux hat geschrieben:
*edit* Achso, jetzt versteh ich das Problem erst^^ Warum muss es denn ein Erbe von string sein? Wäre es nicht sowieso klüger, einfach nur ein string als Memberelement deiner Klasse zu nehmen (wie dani93 schon meinte :) ) ?
Im grunde genommen ja, aber dann müsste man sich entweder selber die Operatoren überladen oder Funktionen schreiben und da hab ich mir gedacht. "Warum das ganze, wenn ich das doch alles von string erben könnte"
Naja, eigentlich müsste das schon gehen.
Aber du willst ja dann "zusätzliche" Funktionalität dazu bekommen, und dazu wirst du wissen müssen, wie die Klasse String aufgabaut ist, um eben auf die Interna von string zugreifen zu können.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Klasse string vererben

Beitrag von cloidnerux » Mo Jun 29, 2009 4:15 pm

Aber du willst ja dann "zusätzliche" Funktionalität dazu bekommen, und dazu wirst du wissen müssen, wie die Klasse String aufgabaut ist, um eben auf die Interna von string zugreifen zu können.
Naja, ich wil nicht direkt auf den string beziehende Funktionen dazu bekommen.
Ich habe halt einen eigenen Konstruktor und die Funktion Draw um es über OpenGL auszugeben.
Das einzige Problem was ich bekommen habe war, das der Operator = nicht mit Übernommen wurde.
Ich habe mir mal die Datei "string" angesehen, da war nur SEHR viel für mich unverständlicher Code drinn.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Klasse string vererben

Beitrag von Kerli » Mo Jun 29, 2009 5:08 pm

cloidnerux hat geschrieben:Ist es überhaupt möglich bestimmte Funktionen und Operatorüberladungen nicht vererbbar zu machen?
Nein, nur der = Operator wird nach dem Standard nie vererbt. Versuch doch einmal zb den += Operator zu verwenden, das sollte problemlos gehen...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Klasse string vererben

Beitrag von cloidnerux » Mo Jun 29, 2009 5:10 pm

Nein, nur der = Operator wird nach dem Standard nie vererbt. Versuch doch einmal zb den += Operator zu verwenden, das sollte problemlos gehen...
Ah, += macht er anstantslos, alos muss ich nur den = Operator neu implementieren
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten