est-ce légal en C ++ (oui, je sais que c'est légal dans .net), et si oui, comment / pourquoi serait-il utilisé?
7 Réponses :
Non, ce n'est pas pris en charge en C ++. La seule chose que le spécificateur code> statique code> se trouve dans .NET vous oblige à faire de tous les membres de la classe statiques; C'est juste un mot clé d'aide. Pour écrire une classe statique en C ++, tout ce que vous avez à faire est de vous assurer que chaque membre de la classe est marqué comme statique code>. (Edit: et un constructeur non public, votre classe "statique" ne peut pas être instanciée.) P>
Vous avez également besoin d'un constructeur non public (idéalement privé).
Ah oui. Je savais que j'oublie quelque chose!
Normalement, cela serait dans un espace de noms.
Il y a des situations quand vous en faites une classe. Utiliser comme une stratégie dans un modèle par exemple.
Cette réponse est fausse. C # statique code> keyword ajoute des métadonnées qui font une classe
abstrait code> et
scellé code> donc même si vous faites référence à un assemblage avec cette classe, vous ne pouvez pas instancier la classe. ou en dériver.
-1 D'accord avec Dmitry. La réponse de Dan ci-dessous est correcte (voir mon commentaire aussi).
@Jonathonreinhart n'est que la réponse correcte si OP utilise C ++ / CLI. S'ils utilisent une simple (non gérée) C ++, la réponse de Dan ne s'applique pas. (Aussi, une façon de creuser une question de près de cinq ans!)
@Adammaras Wow ... Est-ce que ça m'a vraiment manqué? Apparemment, j'étais sous la fausse hypothèse que l'OP demandait à propos de C ++ / CLI. Vraiment désolé. (Et je l'ai creusé parce que j'essayais de comprendre cela, en C ++ / CLI, bien sûr).
@Jonathonreinhart no inquiétude.
Comme mentionné dans le thread suivant, C ++ ne prend pas en charge une classe statique. P>
Si vous voulez dire une classe sans constructeur public ni uniquement des variables statiques, vous pouvez lire ce fil. P>
non, statique code> est destiné aux objets et aux fonctions. P>
L'équivalent le plus proche d'une classe statique en C ++ est une classe avec uniquement des variables d'éléments statiques. Ceci est connu sous le nom de MONOSTE Modèle. Une telle classe signifie que toutes les instances de cette classe auront le même état. La syntaxe d'utilisation d'une instance de monostate est similaire à une classe normale (contrairement à une classe Singleton) et une classe de monostate peut être convertie en une classe normale sans changer de son utilisation. E.G.
// Monostate class public class Administrator { private: static int _userId; public: int UserId() { return _userId; } } // Initializing the monostate value int Administrator::_userId = 42; // Using an instance of a monostate class void Foo() { Administrator admin = new Administrator(); Assert.Equals( 42, admin.UserId() ); // will always be 42 }
Si vous utilisez C ++ / CLI, la syntaxe réelle pour statique code> est
+1 Ceci est la bonne réponse b>. En marquant une classe en tant que telle, essayant d'instancier la classe en C # avec var f = f = f = FOO (); code> donnera aux erreurs attendues "ne peut pas déclarer une variable de type statique FOO" i > et "ne peut créer une instance de la classe statique foo" i>, indiquant que c # considère comme une classe "statique" C #).
Le modificateur code> statique code> au niveau du niveau de fichier en C ++ indique que l'identifiant marqué statique code> n'est visible que dans le fichier dans lequel il est défini. Cette syntaxe n'est pas disponible dans les classes (uniquement des méthodes et des variables), mais un effet similaire peut être obtenu pour les classes à l'aide d'un espace de noms anonyme:
Une classe ne peut pas être the statique code>. Pour la classe statique dans une autre langue, déclarez une classe avec uniquement des membres code> statiques code>.
statique code> avant la déclaration de classe attribue l'objet immédiatement construit, principalement utile avec des classes anonymes; p>
foo code>, le nom de la classe ici est facultatif. p> p>
"Oui, je sais que c'est légal dans .net" pas vrai. Dans C ++ / CLI, les classes statiques sont déclarées sous la forme
CLASSE REF MyClass Abstrait scellé CODE>, pas
Classe statique MyClass code> (c'est la syntaxe C #).