__declspec(delphiclass)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Catégorie

Modificateurs (C++), Extensions des mots clés, Spécificateurs de classe de stockage (C++)

Syntaxe

__declspec( delphiclass ) declarator

Description

L'argument delphiclass est utilisé pour déclarer des classes de style Delphi. De telles classes sont créées avec la compatibilité suivante :

  • RTTI compatible Pascal Objet
  • Gestion des exceptions compatible Delphi
  • Comportement du constructeur / destructeur compatible Delphi
  • Les procédures AfterConstruction et BeforeDestruction (code qui serait placé dans les classes C++ normales, respectivement dans les constructeurs et les destructeurs).

Voici les restrictions pour les classes de style Delphi :

  • Les classes de base virtuelles sont interdites.
  • Pas d'héritage multiple sauf pour le cas décrit dans Héritage et interfaces.
  • Elle doit être allouée dynamiquement en utilisant l'opérateur global new.
  • Les instances de style Delphi sont initialisées à zéro, de telle sorte que leur état soit défini avant l'exécution d'un constructeur ou d'une méthode. Sans cette fonctionnalité, l'invocation de méthodes avant les constructeurs peut conduire à des résultats imprévisibles.
  • Les constructeurs de copie et les opérateurs d'affectation ne sont pas générés par le compilateur pour les classes dérivées de style Delphi.
  • Une déclaration de classe forward qui est traduite depuis Pascal Objet requiert le modificateur delphiclass si le compilateur doit savoir que la classe est de style Delphi. Par exemple, si l'ID de la classe ou une autre information RTTI est nécessaire avant la définition de la classe.

Autres remarques :

  • A l'inverse des classes C++ normales, les constructeurs et les destructeurs des classes de base de style Delphi peuvent invoquer des méthodes virtuelles et exécuter les implémentations "les plus dérivées". Il est ainsi possible qu'une méthode d'une classe soit exécutée avant un constructeur.

Exemple

L'exemple suivant déclare une classe de style Delphi avec une méthode de classe qui renvoie le nom de la classe.

#include <System.hpp>
#include <stdio.h>
#include <tchar.h>

class __declspec(delphiclass) TLock : public TObject {
public:
	virtual __classmethod UnicodeString GetClsName() {
		return this->ClassName();
	}
};

int _tmain(int argc, _TCHAR* argv[]) {
	printf("%ls", TLock::GetClsName().c_str()); // displays TLock
	return 0;
}

Voir aussi