2014-09-22 314 views
0

嗨,大家好!如何打印指向類的指針的值

我有一個問題,請: -

,如果我有一個空指針「VP」這個指針類「瘦肉精」的成員,我怎樣才能打印指針「VP」點價值?在此先感謝 這是我的代碼:

#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

如果你想打印指針(即地址)的值,只需使用putIN.vb

如果你想打印指針指向的值,那麼你必須知道什麼類型(例如使用類型轉換,就像你在構造函數中做的那樣,但是你是否在某處存儲了關於類型的信息,這樣你還記得你做了以後什麼店?

順便說一句,你delete語句將段錯誤,因爲你嘗試刪除未通過new獲得一個指針。

我沒有完全明白你想什麼實現,但你可以詳細說明一下,像這樣:

記住

有了這個,你可以再重載operator < <

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

你會那麼只輸出通過寫cout<<x<<endl;

另一種選擇的結果main()是創建一個模板類。

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

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

並且仍然另一種方法是使用boost:variant它提供了所有你的需要,就可以使用,並且已經進行測試。

+0

感謝幫助 我想打印指針指向 我沒有保存有關類型的信息在任何地方的價值,我不知道該怎麼做 可以請您給我任何教程鏈接想法 – AXR 2014-09-22 17:38:05

+1

@AlexanderHB:如果你想打印它指向的對象的值,你可能想更新你的問題的標題。它目前詢問打印指針本身的值。 – 2014-09-22 17:56:13

+0

@Christophe:tyvm我會嘗試你的代碼 我試圖做一個類,可以爲所有數據類型分配一個內存 例如putIN x = 5將分配整數內存 putIN y = 0.5將分配內存float putIN z ='a'將爲字符分配內存 等等 – AXR 2014-09-22 18:27:46