10
votes

Une classe peut-elle être déclarée statique en C ++?

est-ce légal en C ++ (oui, je sais que c'est légal dans .net), et si oui, comment / pourquoi serait-il utilisé? XXX


1 commentaires

"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é , pas Classe statique MyClass (c'est la syntaxe C #).


7 Réponses :


22
votes

Non, ce n'est pas pris en charge en C ++. La seule chose que le spécificateur statique 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 . (Edit: et un constructeur non public, votre classe "statique" ne peut pas être instanciée.)


9 commentaires

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 keyword ajoute des métadonnées qui font une classe abstrait et scellé 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.



0
votes

Comme mentionné dans le thread suivant, C ++ ne prend pas en charge une classe statique.

Si vous voulez dire une classe sans constructeur public ni uniquement des variables statiques, vous pouvez lire ce fil.

http://www.daniweb.com/forums/thread122285.html#


0 commentaires

1
votes

non, statique est destiné aux objets et aux fonctions.


0 commentaires

8
votes

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 
}


0 commentaires

30
votes

Si vous utilisez C ++ / CLI, la syntaxe réelle pour statique est xxx


1 commentaires

+1 Ceci est la bonne réponse . En marquant une classe en tant que telle, essayant d'instancier la classe en C # avec var f = f = f = FOO (); donnera aux erreurs attendues "ne peut pas déclarer une variable de type statique FOO" et "ne peut créer une instance de la classe statique foo" , indiquant que c # considère comme une classe "statique" C #).



7
votes

Le modificateur statique au niveau du niveau de fichier en C ++ indique que l'identifiant marqué statique 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: xxx


0 commentaires

0
votes

Une classe ne peut pas être statique . Pour la classe statique dans une autre langue, déclarez une classe avec uniquement des membres statiques .

the statique avant la déclaration de classe attribue l'objet immédiatement construit, principalement utile avec des classes anonymes; xxx

foo , le nom de la classe ici est facultatif.


0 commentaires