2010-07-15 4 views
3

J'essaie de comprendre la syntaxe utilisée dans STL pour une classe. Notre professeur nous a sur ce site (http://www.sgi.com/tech/stl/Map.html) où je copiais le code ci-dessous:méthode déclarée dans struct en C++ (STL)

struct ltstr 
{ 
    bool operator()(const char* s1, const char* s2) const 
    { 
    return strcmp(s1, s2) < 0; 
    } 
}; 

int main() 
{ 
    map<const char*, int, ltstr> months; 

    months["january"] = 31; 
    months["february"] = 28; 
    months["march"] = 31; 
    months["april"] = 30; 
    months["may"] = 31; 
    months["june"] = 30; 
    months["july"] = 31; 
    months["august"] = 31; 
    months["september"] = 30; 
    months["october"] = 31; 
    months["november"] = 30; 
    months["december"] = 31; 

    cout << "june -> " << months["june"] << endl; 
    map<const char*, int, ltstr>::iterator cur = months.find("june"); 
    map<const char*, int, ltstr>::iterator prev = cur; 
    map<const char*, int, ltstr>::iterator next = cur;  
    ++next; 
    --prev; 
    cout << "Previous (in alphabetical order) is " << (*prev).first << endl; 
    cout << "Next (in alphabetical order) is " << (*next).first << endl; 
} 

Je ne savais pas que vous pouvez déclarer des méthodes dans struct. Comment ça marche?

Je suppose qu'avec cela, lorsque vous déclarez la carte nommée mois, l'utilisation du lustre dans le champ Comparer d'une carte alphabétise la carte. Mais toujours pas sûr de savoir comment cela fonctionne avec la syntaxe struct. Merci.

Répondre

15

En C++, un struct est vraiment juste une classe dont l'accès par défaut est spécificateur public et qui hérite publiquement par défaut.

En d'autres termes,

struct ltstr 
{ 
    // ... 
}; 

est équivalent à

class ltstr 
{ 
public: 
    // ... 
}; 

Si vous le souhaitez, vous pouvez faire partie de votre struct protected ou private aussi.

La raison pour laquelle struct est encore en C++, même si elle est redondante, est la compatibilité ascendante.

+4

héritage est public par défaut aussi, c'est pourquoi j'utilise tant de structures ... –

+0

@Alexandre: Bon point - J'ai incorporé cela dans la réponse. –

+0

@Alexandre: Oooops ... aurait dû vérifier. Cela signifie que les deux extraits de code ne sont pas seulement quasiment équivalents mais exactement équivalents ... –

1

en C++ struct sont des classes avec des membres du public par défaut

+3

Vous voulez dire, avec les membres publics par défaut – corsiKa

+3

Et hériter en tant que public par défaut. – oscode

+0

@glowcoder: vous avez raison, désolé – onof

0

La structure n'ajoute aucune fonctionnalité par rapport à une classe, sauf par défaut sur les membres publics. En tant que tel, aucune de ces fonctionnalités n'est spécifique à la structure.