Appeler un Non Membre Statique Méthode à partir d'une Autre Méthode
Est-il un moyen d'appeler un non membre de classe statique méthode à partir d'une autre méthode qui est contenue à l'intérieur de la classe en c++? Si oui, quel serait le code?
Problème est, je ne peux pas déclarer cette spécfiques une méthode statique, car il utilise d'autres méthodes au sein de la même classe qui ne fonctionnent pas si je fais une statique.
Je suis en train d'utiliser:
MyClass::myClassMethod();
à partir d'une méthode dans la classe principale, mais il me donne l'erreur: un non membre statique de référence doit être relatif à un objet spécifique.
Pour clarifier, myClassMethod() utilise d'autres méthodes dans Maclasse comme:
void myClassMethod() {
...
anotherClassMethod();
}
donc, si je devais faire myClassMethod statique, il pourrait interférer avec l'appel de anotherClassMethod().
myClassMethod
lui-même statique? Où est-il appelé? Pouvez-vous modifier les arguments de la méthode? Quel est l'objectif du problème que vous avez été affecté?Semble que vous avez vraiment besoin d'avoir un penser à ce que les comportements que vous pourriez voulez ici. La différence fondamentale avec les statiques et non statiques méthodes est que la dernière d'accéder aux données de la classe, ou peut-être faire les appels virtuels qui à l'interne en faire de même. Si
myClassMethod
appels anotherClassMethod
qui est non statique, ne soit besoin de faire cela? Si ce n'est pas statiques. Si oui, alors qu'attendez-vous pour se produire lorsque la méthode tente d'accéder aux données?
OriginalL'auteur aclark | 2012-03-15
Vous devez vous connecter pour publier un commentaire.
Quel est le problème avec l'appel à la non-fonction membre statique d'une
static
fonction membre?Chaque fonction membre statique est passé un
this
pointeur implicitement en plus des paramètres que vous passez le pointeur passé est alors déréférencé pour désigner la classe de l'objet les membres de l'Cependantstatic
fonctions ne sont pas transmises avec l'implicitethis
pointeur et donc on ne peut pas tout non statique de la fonction de membre à l'intérieur d'une fonction membre statique, car il n'y a pas dethis
de 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 vers l'objet à l'intérieur de la méthode statique et ensuite, vous pouvez appeler la fonction membre en utilisant le pointeur.
Comment faire?
Vous aurez à stocker le pointeur de l'objet de classe à l'échelle mondiale, ou de le passer comme une instance dans l'un des arguments de la fonction à la méthode statique.
Cependant, les deux ci-dessus sont des solutions de contournement, la chose importante à noter ici est que Si vous vous sentez le besoin d'appeler un non membre statique de la fonction par une fonction membre statique puis il ya quelque chose de mal dans votre conception.
Sur la Seconde pensées peut-être que j'ai mal lu votre Question avant, Probablement, Votre question est:
Comment appeler un non-fonction membre statique d'une classe de
main
?Vous avez besoin d'une instance de la classe pour appeler les non-fonctions membres statiques.
Donc, tout simplement,
Et de l'appel à tout autre membre de la fonction dans
myClassMethod()
serait tout simplement:Veuillez Vérifier la mise à jour de réponse, j'ai ajouté un peu plus de détail.Est-il judicieux?
Merci pour l'explication. Le problème est, la conception est donnée par l'instructeur, donc je dois travailler avec elle. Semble assez alambiqué pour moi aussi :-/
OriginalL'auteur Alok Save
Une méthode statique est une qui ne fonctionne pas sur un objet particulier. C'est un peu comme une fonction autonome à l'extérieur de la classe, sauf qu'il est autorisé à accéder aux membres privés de sa catégorie.
Si vous
anotherClassMethod()
est non-statique, ce qui signifie qu'il doit être appelée sur un objet spécifique, une instance de la classe. Parce qu'elle est appelée sur un objet, il peut accéder à des données stockées dans l'objet (non-membre statique des variables). SimyClassMethod()
est statique et de la mettre en œuvre commeQui ne fonctionne pas parce que
anotherClassMethod()
s'attend à être appelée sur un objet spécifique, maismyClassMethod()
n'en a pas. Mais si vous savez ce que l'objet que vous voulez l'appeler, vous pouvez le faire en simple appel de méthode sur un objet:La
object
ne pas être passé comme un argument, ça pourrait être une variable membre statique d'une classe, par exemple:En fin de compte, la question que vous devez vous poser est: pourquoi est -
myClassMethod()
statique, et pourquoi est -anotherClassMethod()
non-statique? Prendre du recul, de réfléchir à cemyClassMethod()
est censé faire. Est-il judicieux de l'appeler quand vous n'avez pas une instance de travailler avec? Si oui, pourquoi est-il nécessaire d'appeler une méthode qui s'attend à travailler avec un exemple?OriginalL'auteur Wyzard
La seule façon d'appeler un non méthode statique d'une classe est une instance de cette classe. Si vous besoin de quelque chose comme cela...
OriginalL'auteur Lou
Je pense que vous pourriez peut-être utiliser le pattern singleton, de maintenir une instance de la classe mondiale. comme une classe utilitaire.
OriginalL'auteur wangdxh