2014-09-22 3 views
0

안녕 얘들 아!클래스 포인터가 가리키는 값을 어떻게 출력합니까

내가 무효 포인터 "부사장"가이 포인터 클래스 "CL"의 구성원 인 경우 어떻게에 값 포인터 "부사장"지점을 인쇄 할 수 있습니다 : -

은 내가하시기 바랍니다 질문이? 그냥 putIN.vb를 사용하여 포인터 (즉, 주소)의 값을 인쇄하려면

#include <iostream> 
#include<conio.h> 



using namespace std; 

class putIN 
{ 
    public: 
    void *vp; 
    int *intP;float *floatP;double *doubleP; 
    int valueInt; 
    double valueDouble; 
    char valueFloat; 

    putIN(); 
    putIN(int x); 
    putIN(double x); 
    putIN(float x); 
    ~putIN() 
     { 
      delete intP; 
      delete floatP; 
      delete doubleP; 
     } 
}; 


putIN::putIN(int x){vp = & valueInt; *((int*)vp) = x;} 
putIN::putIN(float x){vp = & valueFloat; *((float*)vp) = x;} 
putIN::putIN(double x){vp = & valueDouble; *((double*)vp) = x;} 


int main() 
{ 
    putIN x = 5; 
    cout<<?????<<endl;// what do i have to put instead of the ?????? 
        //to print the value that *vp point to 
getch(); 
return 0; 
} 

답변

0

: 감사 사전 이 내 코드입니다.

POINTS TO 포인터 값을 인쇄하려면 생성자에서와 마찬가지로 유형을 알고 있어야합니다 (예를 들어, 생성자에서 사용한 것처럼 캐스트를 사용합니다.하지만 어딘가에 유형에 대한 정보를 저장합니까? 당신이 가게를했다 나중에 기억 할 수 있습니까? 그런데

, 당신의 delete 문 세그 폴트 것, 당신이 new을 통해 얻은되지 않은 포인터를 삭제하려고하기 때문이다.

을 나는 완전히 당신이 무엇을하려고 이해하지 못했다 달성하십시오, 그러나 당신은 이것 같이 무언가로 조금 정성 들여 만들 수 있었다 :

이와

마음에, 당신은 그 운영자 그런 다음 cout<<x<<endl;

다른 대안을 작성하여 main()에서 바로 출력 결과는 템플릿 클래스를 생성하는 것입니다 것 < <

ostream& operator<< (ostream& os, putIN p) { 
    if (mytype=='I') 
     os << *(int*)vp; 
    else // ... the handling of other supported types here 
    return os; 
} 

과부하 수 있습니다.

template <class T> 
    class putIN 
    { 
     public: 
     T *vp; 
     T value; 

     putIN(T x) {vp = &value; *vp = x;} 
     ~putIN() {} 
    //... 
    }; 

그리고 또 다른 방법은 사용할 준비가 이미 테스트의 모든 필요를 제공 boost:variant을 사용하는 것입니다.

+0

도움을 주셔서 감사합니다 포인터가 가리키는 값을 에 인쇄하고 싶습니다. 형식에 대한 정보를 저장하지 않았으며 그 방법을 알지 못했습니다. 튜토리얼 링크를 알려주십시오. – AXR

+1

@AlexanderHB : 가리키는 대상의 값을 인쇄하려면 질문의 제목을 업데이트 할 수 있습니다. 현재 포인터 자체의 값을 출력 할 것인지 묻습니다. –

+0

@Christophe : tyvm 코드를 사용해 보겠습니다. 모든 데이터 형식에 메모리를 할당 할 수있는 클래스를 만들려고합니다. 예를 들어 putIN x = 5는 정수로 메모리를 할당합니다. putIN y = 0.5는 메모리를 할당합니다. float putIN z = 'a'는 숯에 대한 메모리를 할당합니다 등등 – AXR

관련 문제