Comment Appeler une Fonction d'une classe sur l'objet d'une autre classe?
Comment puis-je appeler une méthode dans une classe de plus à l'aide d'une autre classe ?
J'ai ;
class A {
public :
foo ( ) ;
};
class B {
public :
bar ( ) ;
};
principal :
A data ; //I am creating instance of class A
data . bar ( ) ; // but, I am calling a method of another class
//how can I do that ?
Note : je ne pouvais pas trouver un titre approprié. Si vous en avez un, n'hésitez pas à partager ou éditer
Que voulez-vous que faire?
Un guide de référence rapide dérivant des classes pourrait être utile. en.cppreference.com/w/cpp/language/derived_class
Un guide de référence rapide dérivant des classes pourrait être utile. en.cppreference.com/w/cpp/language/derived_class
OriginalL'auteur user1414276 | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
À moins que les deux classes sont liées(par héritage) Vous ne pouvez pas le faire.
Une des fonctions de membre effectue une action sur l'instance de la classe à laquelle il appartient.
Vous avez créé un objet de la classe
A
de sorte que vous pouvez seulement appeler des fonctions de membre deA
à travers elle.De broyage d'une Pomme et de l'espoir d'obtenir une mangue bougé, n'arrivera jamais à droite.
OriginalL'auteur Alok Save
Utilisation publique de l'héritage:
OriginalL'auteur starius
Je pense que si vous voulez utiliser .bar() sur Un objet doit hériter par B.
La réponse est: classe A : B
c'est privé de l'héritage. Il ne peut pas atteindre ce que l'OP veut.
OriginalL'auteur Mateusz Rogulski
Il n'est pas clair ce que vous voulez
data.bar()
à faire.bar()
comme aucun accès à des données, de sortebar()
n'a rien à voir avec la variabledata
. Donc, je dirais, quedata.bar()
est inutile, vous visez justebar()
.Sans doute, si
bar()
est juste une fonction, vous pouvez la déclarerstatic
et appelB.data()
L'autre option est que vous avez voulu héritage que certains autres ont déjà écrit à propos de. Soyez prudent avec l'héritage, et assurez-vous que vous héritez d'Une de B seulement si il y a une relation " est-un, et qu'il satisfait à la Principe De Liskov. N'héritent pas de B juste parce que vous avez d'appeler
bar()
.Si vous souhaitez utiliser B, vous pouvez avoir une instance de B à l'intérieur de A. Lire sur préférant la composition au cours de l'héritage
OriginalL'auteur Chip
Comme tout le monde le dit dans leurs réponses.
Ses une mauvaise idée et pas possible.
Vous pouvez uniquement utiliser des trucs que personne ne sait vraiment comment ça va se comporter.
Vous pouvez obtenir le pointeur d'Un objet et de le jeter à poiter de B.
Encore une fois le seul usage de cette est de montrer aux autres ce que ne pas le faire.
OriginalL'auteur Horonchik
Je pense que vous devriez lire 1 ou 2 c plus plus de livre(s) et d'obtenir une juste idée de ce que les classes sont et ce qu'ils sont censés servir.
Quelques suggestions: Le c++ programmation par Bjarne Stroustrup ou de Penser en c++ par Bruce Eckel ou effectuer une recherche sur le net pour les tutoriels.
OriginalL'auteur vikramjitSingh
Vous pouvez utiliser un pointeur de fonction. La seule façon de le faire pas statique consiste à utiliser des modèles.
OriginalL'auteur aj.toulan
Vous pouvez également déclarer la classe
B
comme unfriend
de classeA
.Je crois que la syntaxe est:
Mais avec cela, je crois que vous pouvez uniquement utiliser des fonctions et des variables d'
A
à l'intérieur deB
fonctions.L'héritage sera probablement votre meilleure approche.
OriginalL'auteur JustThatTypeOfGuy
Bien que cette question est étrange !, mais voici quelques solutions
L'utilisation de l'héritage
De Type cast
Ou réinterpréter cast
Si la barre() utiliser les variables de membre de B, alors le résultat n'est pas prévisible.
La fonte versions sont en fait équivalentes. Si la barre (de) ne pas faire usage de tout non-membre statique de la variable du formulaire B, il peut être défini comme une fonction membre statique sans aucune erreur ou de l'effet.
Si la barre (de) ne pas faire usage de tout non-membre statique de la variable du formulaire B, il agit comme une fonction statique. Il peut être défini comme une fonction membre statique sans aucune erreur ou d'effets secondaires. Puis tout pointeur valide de type B* peut être utilisé pour invoquer bar() sans erreur. Essayez!.
OriginalL'auteur Aimar Hassano