Y a-t-il un moyen d'appeler une méthode de membre de classe non statique d'une autre méthode contenue dans la classe principale de C ++? Si oui, à quoi ressemblerait le code?
problème est que je ne peux pas déclarer cette méthode spécifique comme statique, car elle utilise d'autres méthodes dans la même classe qui ne fonctionnent alors pas si je fais une statique. < / p>
J'essaie d'utiliser: p> d'une méthode dans la classe principale, mais cela me donne l'erreur: une référence de membre non statique doit être par rapport à un objet spécifique. p> clarifier, MyClassMethod () utilise d'autres méthodes dans MyClass comme: p> donc si je devais faire myClassMethod statique interférerait avec appeler autreClassMethod (). p> p>
4 Réponses :
Quelle est la transaction avec une fonction de membre non statique à partir d'une fonction de membre code> statique forte> chaque fonction de membre non statique est transmise un Vous aurez besoin d'un mécanisme pour obtenir le pointeur à l'objet à l'intérieur de la méthode statique de la méthode statique. Et puis vous pouvez appeler la fonction membre en utilisant ce pointeur. Cependant, les deux ci-dessus sont des contours, l'important à noter ici est que si vous ressentez la nécessité d'appeler une fonction de membre non statique via une fonction de membre statique, alors quelque chose ne va pas dans votre conception. P> sur deuxième pensées peut-être que j'ai mal lu votre question avant, probablement, votre question est la suivante: p> Vous avez besoin d'une instance de la classe pour appeler des fonctions de membre non statiques. et appeler toute autre fonction membre de l'intérieur ceci < / Code> Pointeur implicitement en plus des paramètres que vous passez, le pointeur passé est ensuite déréférencé pour renvoyer les éléments d'objet de classe cependant
Les fonctions statiques code> ne sont pas passées avec le pointeur implicite code> et Par conséquent, on ne peut pas appeler une fonction de membre non statique dans une fonction de membre statique car il n'y a pas de
ce code> pour le faire. P>
Comment faire ça? strong>
Vous devrez stocker le pointeur sur l'objet de classe mondiale ou le transmettre comme une instance dans l'un des arguments de fonction à la méthode statique. P>
Main code>? strong> p>
Donc, simplement, p> myClassMethod () code> serait simplement: p>
Désolé, je suis un débutant. Comment ferais-je cela?
@aclark: Veuillez vérifier la réponse mise à jour, j'ai ajouté plus de détails.Does cela a un sens?
Merci pour l'explication. Le problème est que la conception est donnée par l'instructeur, je dois donc travailler avec elle. Cela me semble assez convolué aussi: - /
Le seul moyen d'appeler une méthode non statique d'une classe se fait par une instance de cette classe. Donc, vous auriez besoin de quelque chose comme ça ...
Une méthode statique est une méthode qui ne fonctionne pas sur un objet particulier. C'est beaucoup comme une fonction autonome en dehors d'une classe, sauf qu'il est autorisé à accéder aux membres privés dans sa classe.
Si vous qui ne fonctionnera pas car l'objet finalement, la question que vous devez vous poser est: pourquoi Un autreClassMethod () code> n'est pas statique, cela signifie qu'il doit être Appelé sur un objet spécifique, une instance de la classe. Parce que cela s'appelle sur un objet, il peut accéder aux données stockées dans cet objet (variables de membre non statiques). Si
myClassMethod () code> est statique et que vous l'implémentez comme p>
autreClassMethod () code> attend Pour être appelé sur un objet spécifique, mais
myClassMethod () code> n'en a pas. Mais si vous savez quel objet vous souhaitez l'appeler, vous pouvez le faire sous forme de méthode ordinaire sur un objet: p>
code> ne doit pas être transmis comme un argument; Il pourrait s'agir d'une variable de membre statique dans la classe, par exemple: p>
myClassMethod () Code> statique et pourquoi
autreClassMethod () code> non statique? Prenez un pas en arrière, pensez à ce que
myClassMethod () code> est censé faire. Cela a-t-il du sens de l'appeler lorsque vous n'avez pas d'instance avec lequel travailler? Si oui, pourquoi faut-il appeler une méthode qui s'attend à travailler avec une instance? P> p>
Je pense que vous pourriez peut-être utiliser le modèle Singleton, conserver une instance de la classe dans le monde. comme une classe d'utilité. P>
Après avoir lu la question et les commentaires dans les réponses déjà postées, il serait toujours utile d'avoir encore plus d'informations sur ce que vous essayez de faire. Est
myClassMethod code> statique? Où est-il appelé? Pouvez-vous modifier les arguments en la méthode? Quel est l'objectif du problème que vous avez été assigné?
On dirait que vous avez vraiment besoin de penser à quel comportement vous voudrez peut-être ici. La différence clé avec des méthodes statiques et non statiques est que cette dernière doit accéder à des données de classe ou peut-être effectuer des appels virtuels qui font de la même manière en interne. Si
myClassMethod code> Appels
autreClassMethod code> qui est non statique, a besoin de faire cela? Sinon, faites-leur statique. Si tel est le cas, alors que vous attendez-vous à arriver lorsque la méthode tente d'accéder aux données?