Melden Sie sich hier an, um auf Kommentare und die Whitepaper-Datenbank zugreifen zu können.

Kein Log-In? Dann jetzt kostenlos registrieren.

Falls Sie Ihr Passwort vergessen haben, können Sie es hier per E-Mail anfordern.

Der Zugang zur Reseller Only!-Community ist registrierten Fachhändlern, Systemhäusern und Dienstleistern vorbehalten.

Registrieren Sie sich hier, um Zugang zu diesem Bereich zu beantragen. Die Freigabe Ihres Zugangs erfolgt nach Prüfung Ihrer Anmeldung durch die Redaktion.

29.03.1996 - 

Bessere Portabilitaet, verbessertes Typkonzept und einheitliche Bibliothek

Geplanter ANSI-Standard beseitigt die Defizite von C++

C++ ist eine Hybridsprache, die ihre Abkunft von C nicht leugnen kann. Sie zwingt Programmierer nicht zur Einhaltung objektorientierter Prinzipien und erlaubt, auch prozedural zu entwickeln. Eine primaere Zielsetzung bei C++ ist wie bei C die hohe Effizienz der erzeugten Programme und nicht die leichte Erlernbarkeit und Verstaendlichkeit der Sprache. Daher gibt es beispielsweise mehrere Zugriffsmoeglichkeiten auf Objekte (Objektname, Zeiger, Referenz), so dass der Entwickler das effizienteste Verfahren auswaehlen kann. Der hybride Charakter von C++ wird auch mit dem fuer 1997 geplanten Standard nicht verschwinden.

Ein gravierendes Problem von C++ ist die mangelnde Portabilitaet. Schon 1990 erfolgte mit dem "Annotated C++ Reference Manual" (ARM) eine Sprachdefinition, allerdings sind bis heute nicht alle dort beschriebenen Mechanismen von allen Compiler-Herstellern einheitlich realisiert worden. So gibt es bis heute nur Quasistandards wie den Cfront-Compiler von AT&T, mit dem jedoch keine verbindliche Portabilitaet erreicht werden konnte.

Grundlage des Standards ist das ARM, saemtliche dort beschriebenen Sprachmechanismen sind auch im ANSI-Entwurf enthalten. Dazu gehoeren vor allem Templates und Exception handling als verbindliche Bestandteile. Darueber hinaus enthaelt er eine Reihe vollkommen neuer Mechanismen, die zum grossen Teil aus anderen objektorientierten Sprachen uebernommen wurden.

Zur Erkennung des dynamischen Typs von Variablen wird der neue Operator "typeid()" eingefuehrt. Damit laesst sich feststellen, auf welche Art von Objekt ein Zeiger oder eine Referenz gerade verweist. In Verbindung mit den neuen Cast-Operatoren soll er die Gefahr fehlerhafter Zugriffe auf Objekte erheblich verringern.

Eine Erleichterung besonders fuer die Entwickler von C++- Bibliotheken ist die Einfuehrung von Namespaces (Gueltigkeitsbereiche fuer Namen). Sie sollen verhindern, dass es zu Namenskonflikten mit anderen Bibliotheken und Produkten kommt, da jeder Bezeichner innerhalb des entsprechenden Namespace eindeutig ist.

Virtuelle Funktionen sind bisher nur eingeschraenkt einsetzbar, da in einer Klassenhierarchie alle zusammengehoerigen virtuellen Funktionen den gleichen Rueckgabewert liefern muessen. Dies ist vor allem dann von Nachteil, wenn sie Objekte der eigenen Klasse zurueckgeben sollen. Der geplante ANSI-Standard erlaubt unterschiedliche Rueckgabewerte und verbessert damit die Anwendungsmoeglichkeiten fuer virtuelle Funktionen.

Das Fehlen eines eigenen Operators zur dynamischen Erzeugung von Arrays ist eine weitere Luecke der bisherigen Sprach- definition. Der ANSI-Standard schliesst sie mit den neuen Operatoren "new[]" und "delete[]".

Voellig neu ist die Definition einer Standardbibliothek, die jeder Compiler-Hersteller liefern muss. Wie schon C lagert C++ einen grossen Teil der Funktionalitaet aus der Programmiersprache selbst in Funktionen und Klassen einer Bibliothek aus. Die Standardbibliothek zu C++ deckt wesentlich mehr Aufgabengebiete ab als jene von C. Ein Teil der Funktionalitaet dient dem Zugriff auf das Betriebssystem, allerdings muessen weitergehende Steuerungsmoeglichkeiten ueber das jeweilige API realisiert werden. Die Standardbibliothek bietet ein Klassensystem zur Ausnahmebehandlung an, auf dessen Hierarchie Entwickler eigene Systeme zur Fehlerbehandlung aufbauen koennen.

Eine echte Neuerung stellen die Container-Klassen dar, die der ANSI-Standard aus der Standard Template Library (STL) von Hewlett- Packard uebernimmt. Dieses System besteht aus Container-Klassen sowie Iteratoren und Algorithmen zum Zugriff auf die Komponenten der Container. Die Trennung in Container und Funktionalitaet zum Zugriff widerspricht eigentlich dem objektorientierten Gedanken der Kapselung von Daten und zugehoerigen Methoden. Sie ermoeglicht jedoch eine sehr effiziente Realisierung, da die jeweils optimale Kombination aus Container und Algorithmus gewaehlt werden kann.

Neben diesen grundlegenden Neuerungen gibt es eine Reihe kleinerer Aenderungen. Fuer logische Variablen steht ein Datentyp "Bool" zur Verfuegung. Enumerationen werden nicht mehr als Int-Werte interpretiert, sondern als eigene Datentypen. Mit dem neuen Schluesselwort "mutable" koennen einzelne Elemente einer Klasse so definiert werden, dass sie auch in konstanten Objekten veraenderbar sind. *Werner Achert ist Projektleiter bei der Integrata AG in Muenchen.