2010-03-06 5 views
1

Quel serait l'équivalent de ceci en C++ de l'extrait suivant. Je suis en train de convertir des parties d'une application Java en C++."public static final Object" de Java en C++

Voici cet extrait de classe java:


class container { 
    Public static final Object CONTAINER_FULL = new Object { 
    public boolean equals(Object other) { 
     // ... 
    } 
    String toString() { 
     // ... 
    } 
    // ... 
    } 
    // ... 
} 

La classe ci-dessus est enveloppé dans une classe interface Java "conteneur". L'appel est ...


public Object fetch_the_object(int at_pos) { 
    if (at_pos == MAX) { 
     return container.CONTAINER_FULL; 
    } 
    // ... 
} 

Quel serait le plus proche équivalent en C++ de cette classe statique et son appel?

+0

Quel est le but de la classe de conteneur? Quel genre de chose représente-t-elle? Quel problème est-il destiné à résoudre? – MatrixFrog

+2

Je crains que cela ne se traduise pas directement en C++, qui est une langue très différente. Peut-être que si vous expliquiez ce dont vous aviez réellement besoin, quelqu'un pourrait fournir du code C++ pour le faire. – Tronic

+0

La classe dans laquelle se trouve cet objet statique public est une classe d'interface. L'implémentation de cela est une classe d'un tableau contenant des chaînes incluant NULL à la fin de la chaîne. Dites, le fetch_the_object() renvoie un élément (basé sur l'index passé at_pos) du tableau, si la fin de la fin de la chaîne (ou NULL) est atteinte) alors CONTAINER_FULL Object est retourné. La fonction toString() dans cette chaîne de retour de classe statique ("end") et la méthode equals compare l'objet transmis avec l'objet this (CONTAINER_FULL), s'il est égal, il rétablit un objet CONTAINER_FULL. –

Répondre

1
class Thing 
{ 
    public: 
     static const OtherThing CONTAINER_FULL; 
}; 
const OtherThing Thing::CONTAINER_FULL = blah; 

Les types de données constants, statiques et non entiers doivent être définis en dehors du corps de classe. Si vous voulez OtherThing être quoi que ce soit, changer pour

void * 
+2

Leurs définitions doivent également généralement figurer dans le fichier d'implémentation (.cc, .cpp) plutôt que dans l'en-tête. – Tronic

+0

Oui, en effet Tronic. L'exemple ici est avec brièveté à l'esprit, mais fonctionnerait certainement. – Zach

+0

Et la fonction toString serait implémentée comme un opérateur C++ << vérifiant cet objet? –

0

Quelque chose comme ça, peut-être:

struct Container { 
    struct Full { 
     ... 
    }; 
    static const Full full; 
}; 
+0

Je pense qu'en C++ ce serait comme une classe wrapper autour de ce tableau (voir ci-dessus). Chaque fois qu'un NULL (fin de sentnce) est atteint, cet objet est retourné. CONTAINER_FULL dans la représentation de chaîne (ou cette méthode toString) est "end". Mais je ne suis pas encore sûr ... –