81 votes

Que signifie "class :" en C++ ?

Je ne l'ai jamais vu avant. Je pensais que c'était une faute de frappe pour "::sample", mais quand j'ai vu qu'il compilait réellement, j'étais très confus. Quelqu'un peut-il m'aider à le découvrir ? Je ne pense pas qu'il s'agisse d'un goto étiquette.

void f() {
  class: sample {
    // there were some members declared here
  } x;
}

83voto

Alexandre C. Points 31758

Il s'agit d'une classe sans nom, et les deux points signifient qu'elle hérite de manière privée de sample . Voyez-le comme

class Foo : private sample
{
    // ...
};

Foo x;

21voto

Nawaz Points 148870

Je pense que c'est la définition une classe sans nom à partir de sample . Et x est une variable de cette classe non nommée.

struct sample{ int i;};

sample f() 
{
  struct : sample 
  {
    // there were some members declared here
  } x;
  x.i = 10;
  return x;
}
int main() 
{
        sample s = f();
        cout << s.i << endl;
        return 0;
}

Exemple de code sur le site ideone : http://www.ideone.com/6Mj8x

PS : J'ai changé class a struct pour des raisons d'accessibilité !

2voto

phresnel Points 20082

C'est une classe sans nom.

Vous pouvez les utiliser, par exemple, pour remplacer les fonctions locales dans les versions pré-C++11 :

int main() {
    struct {
        int operator() (int i) const {                 
            return 42;
        }
    } nice;

    nice(0xbeef);
}

Le colon suivi de sample signifie simplement découler de sample utilisation de l'héritage par défaut . (pour les structs : public, pour les classes : privé)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X