J'ai une classe qui a un vecteur d'objets. Que dois-je faire pour retourner un de ces objets et le changer en dehors de la classe, en gardant les changements? Est-il possible de faire avec des pointeurs réguliers? Y a-t-il une procédure standard? Si le vecteur contient des pointeurs sur des objets, tout changement à l'un des objets renvoyés par le vecteur (ou plus précisément à l'objet pointé) affectera également l'instance à l'intérieur du vecteur. (Objet de retour C++
Répondre
Si vous avez std :: vector où A est votre classe, vous pouvez retourner un std :: vector :: iterator.
class A {
public: int a;
};
std::vector<A> v = ...;
std::vector<A>::iterator it = v.begin(); // access to the first element
it = v.begin() + 5; // access to the 5-th element (vector can do random access)
// 'it' can now be used elsewhere
it->a = 0; // changes are reflected in the object inside the vector
*it = A(); // changes the object hold by the vector
Attention, les itérateurs peuvent être invalidés si le vecteur change!
) .
Votre question est un peu vague, mais voici un exemple:
class foo
{
public:
foo()
{
vec.resize(100);
}
// normally would be operator[]
int& get(size_t pIndex)
{ // the return type is a reference. think of it as an alias
return vec[pIndex]; // now the return value is an alias to this value
}
private:
std::vector<int> vec;
};
foo f;
f.get(10) = 5;
// f.get(10) returned an alias to f.vec[10], so this is equivalent to
// f.vec[10] = 5
La FAQ a une belle section on references. En outre, si vous êtes novice en C++, n'essayez pas d'apprendre avec des ressources en ligne. Si vous n'avez pas de livre, you should, ils sont vraiment le seul bon moyen d'apprendre la langue.
+1, mais vous souhaiterez peut-être afficher la déclaration de vec pour plus de clarté. – Cam
@incrediman: C'est dans la section privée de la classe, à moins que je ne sois mal compris. – GManNickG
Vous devez souligner les détails sur le renvoi d'une référence. Pour quelqu'un de nouveau à la langue, il ne peut pas évident que c'est la "magie" ici. –
Vous devez retourner une référence ou un pointeur à l'objet.
type &getref(); // "type &" is a reference
type *getptr(); // "type *" is a pointer
L'appelant aura alors accès à l'objet sous-jacent.
Mais vous devez ensuite vous assurer que l'objet ne bouge pas (ce qui peut être le cas si un vecteur doit croître). Vous voudrez peut-être penser à utiliser une liste std :: à la place.
- 1. Retour d'une copie d'un objet en C++
- 2. Retour objet De Webservice
- 3. C# retour objet de tableau laisse pointer à l'élément Array
- 4. C++ Retour et insertion d'un objet de tableau 2D
- 5. retour objet de Classic Asp
- 6. Retour objet avec Zend_Soap
- 7. Retour objet plantage iPhone
- 8. C#: Raccourcir le code (Nullable objet, retour Propriété ou String.Empty)
- 9. Retour d'un pointeur vide sur un objet constant dans C
- 10. C#, type de retour dynamique
- 11. NSDateFormatter retour nul objet NSDate
- 12. objet PHP valeur de retour par défaut
- 13. C++ Retour de modèle
- 14. Retour d'un pointeur d'argument sur un objet
- 15. C# Appels ambigus - Type de retour différent
- 16. C# retour au type var?
- 17. C# objet/objet
- 18. XIR3 API Rebean Webi Objet retour SQL
- 19. Retour dans Objective-C
- 20. retour Synchronisé objectif-c
- 21. Implémentation du type de retour de la fonction automatique C++ [type de retour-retour]
- 22. Retour de l'index d'un objet par valeur de dictionnaire
- 23. retour objet de résultat à partir de PHP db requête
- 24. C#. Liaison objet à objet
- 25. classe de retour de la fonction en C#
- 26. analyse syntaxique [Objet] retour .load jquery de php
- 27. Sélectionnez le contenu de JQuery objet ajax retour
- 28. Retour d'un objet initialisé par le "constructeur de commodité"
- 29. ASP.NET: {WebService retour objet [0]} au lieu de int
- 30. ProxyFactoryBean retour objet classe nulle pour la classe cible
Faites-vous référence au vecteur stl? S'il vous plaît fournir un pseudo code exemple de ce que vous voulez. – sramij