Am Freitag, 17. August 2001 11:32 hast du geschrieben:
// Eine Klasse für IDs. Zur Zeit sind die IDs als QString // implementiert. Das kann sich in Zukunft ändern. // Aber ich will _immer_ die Möglichkeit anbieten, eine ID // (zu Debug-Zwecken) in einen QString zu konvertieren. class ID : private QString { };
Wäre es nicht viel sinnvoller sowas zu machen (ohne Gewähr für Syntax -- es geht nur ums Prinzip):
class ID { public: ID(int); ~ID() { ... }; QString get; private: QString num; }
ID id;
id.get.latin1() ist dann der String, den du haben willst.
Mit einem static_cast könnte es auch gehen -- ist aber für diesen Fall extrem dirty (obwohl der Compiler beim Übersetzen meckert, wenn du die Implementierung änderst). Besser ist immer eine definierte Schnittstelle zu benutzen und nur die Klasse intern zu ändern!
ID id; QString s; s = id; // Dat geht nicht. Weil QString private ist in // ID. // Typconvertierungs-Operator in ID (nach QString) // hilft auch nicht: er wird nicht genutzt, sagt der // Compiler (type conversation operator for cast // to base class not used)
Was soll denn das private überhaupt?
Aus "Die C++ Programmiersprache": wenn eine Klasse "Abgeleitet" eine *öffentliche* Basisklasse "Basis" hat, dann kann ein "Abgeleitet*" einer Variablen vom Typ "Basis*" ohne Nutzung einer expliziten Typumwandlung zugewiesen werden. Die umgekehrte Konvertierung von "Basis*" nach "Abgeleitet*" muß explizit erfolgen.
"static_cast" und "dynamic_cast" könnten helfen (ohne "private")
ganz quick and dirty könntest du also das "private" durch "public" ersetzen und mit einem "static_cast" direkt auf die Elementfunktionen von QString zugreifen.
Hoffe, das bringt dich weiter Uwe