8
votes

Appelez une méthode de membre non statique d'une autre méthode

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: xxx

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.

clarifier, MyClassMethod () utilise d'autres méthodes dans MyClass comme: xxx

donc si je devais faire myClassMethod statique interférerait avec appeler autreClassMethod ().


2 commentaires

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 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 Appels autreClassMethod 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?


4 Réponses :


5
votes

Quelle est la transaction avec une fonction de membre non statique à partir d'une fonction de membre statique

chaque fonction de membre non statique est transmise un 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 ne sont pas passées avec le pointeur implicite 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 pour le faire.

Quelle est la solution, si vous voulez le faire de toute façon?

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.
Comment faire ça?
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.

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.


sur deuxième pensées peut-être que j'ai mal lu votre question avant, probablement, votre question est la suivante:

Comment appeler une fonction de membre non statique d'une classe de Main ?

Vous avez besoin d'une instance de la classe pour appeler des fonctions de membre non statiques.
Donc, simplement, xxx

et appeler toute autre fonction membre de l'intérieur myClassMethod () serait simplement: xxx


3 commentaires

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: - /



3
votes

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 ... XXX


0 commentaires

4
votes

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 Un autreClassMethod () 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 () est statique et que vous l'implémentez comme xxx

qui ne fonctionnera pas car autreClassMethod () attend Pour être appelé sur un objet spécifique, mais myClassMethod () 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: xxx

l'objet ne doit pas être transmis comme un argument; Il pourrait s'agir d'une variable de membre statique dans la classe, par exemple: xxx

finalement, la question que vous devez vous poser est: pourquoi myClassMethod () statique et pourquoi autreClassMethod () non statique? Prenez un pas en arrière, pensez à ce que myClassMethod () 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?


0 commentaires

0
votes

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é.


0 commentaires