2014-06-13 2 views
0

code: Je veux accéder à l'affichage de la fonction des membres de classe en utilisant ptr p ... comment faire?Comment accéder aux membres de la classe en utilisant le pointeur void (générique) en C++

#include "stdafx.h" 
#include<iostream> 
using namespace std; 
class car 
{ 
public: 
int i,j; 
    car():i(5),j(9){}; 
    car(int a,int b):i(a),j(b){} 
    void display(); 
}; 
void car::display() 
    { cout<<i<<j;} 
void main() 
{ 
    car *obj=new car; 
    void *p=obj; 
***//how to access 'display() or i or j' using 'p'*** 
} 
+3

Vous ne pouvez pas à moins que vous le jeter. Voir cette [question.] Similaire [1] [1]: http://stackoverflow.com/questions/12995287/access-element-of-struct-passed-into-a-void-pointer – jazaman

+0

ok ... thanx ..... – user3700548

Répondre

0

Vous devez déclarer comment vous voulez traiter le pointeur vide chaque fois que vous l'utilisez. la façon de le faire est avec coulée (voiture *) p

car *obj=new car; 
void* p; 
p =obj; 
((car*)p)->display(); 

system("pause"); 
+1

Evitez le style C en C++! – Hiura

+0

Veuillez ne pas donner d'exemples C++ avec des moulages de type c. Ils sont un choix de style de codage médiocre (difficile à trouver dans le code, dangereux, non extensible et ils introduisent un code qui échoue silencieusement lorsque les types de données changent). – utnapistim

0

Il est étrange, vous savez, quand vous déclarez une donnée de vide *, les données ont pas infomation, que
de type signifie que vous ne connaître le contenu des données, il pourrait être voiture, il pourrait aussi être un tronc, float, int ... alors pourquoi devriez-vous faire cette conversion?

0

Depuis que vous avez taguée C++ dans votre question, je répondrai ceci sur C++

Pour ce type de conversions utiliser coulée statique: static_cast qui peut effectuer des conversions entre des pointeurs vers les classes associées, non seulement upcasts (de pointeur-to dérivé à pointeur-à-base), mais aussi des downcasts (de pointeur-à-base à pointeur-à-dérivé). Aucune vérification n'est effectuée pendant l'exécution pour garantir que l'objet en cours de conversion est en fait un objet complet du type de destination. Par conséquent, il appartient au programmeur de faire en sorte que la conversion est sûr

Pour en revenir à votre code:

#include<iostream> 

using namespace std; 

class car 
{ 
public: 
    int i, j; 
    car() :i(5), j(9){}; 
    car(int a, int b) :i(a), j(b){} 
    void display(); 
}; 
void car::display() 
{ 
    cout << i << j; 
} 

void main() 
{ 
    car *obj = new car; 
    void *p = obj; 
    //convert back to car from void. 
    car *casted_void_p = static_cast<car*>(p); //not safe - you may lose data or cause run time errors if casting from wrong object 
    casted_void_p->display(); 
} 
Questions connexes