C++でvectorを扱っているプログラムの問題を解いています。
vecはvectorの要素をクラスWrapperへのポインタとしています。
main()でイテレータを使ってvecの先頭要素vec.begin()から順にWrapperクラスのprint関数を使って要素を出力しようとしているのですが実行結果のようにアドレスが表示されてしまいます。
解決方法があれば教えていただきたいです。
ソースコード
c++
1#include <iostream> 2#include <vector> 3 4using namespace std; 5 6class Wrapper { 7public: 8 Wrapper() { 9 } 10 virtual void print() const { 11 } 12}; 13 14class IntWrapper: public Wrapper { 15private: 16 // BEGIN 17 int value; 18 // END 19public: 20 IntWrapper(int intValue) { 21 // BEGIN 22 this->value = intValue; 23 // END 24 } 25 // BEGIN 26 void print() const { 27 cout << this->value << endl; 28 } 29 // END 30}; 31 32class CharWrapper: public Wrapper { 33private: 34 // BEGIN 35 char value; 36 // END 37public: 38 CharWrapper(int charValue) { 39 // BEGIN 40 this->value = charValue; 41 // END 42 } 43 // BEGIN 44 void print() const { 45 cout << this->value << endl; 46 } 47 // END 48}; 49 50int main() { 51 vector<Wrapper*> vec; 52 vec.push_back(new IntWrapper(1)); 53 vec.push_back(new CharWrapper('A')); 54 vec.push_back(new CharWrapper('x')); 55 vec.push_back(new IntWrapper(-234)); 56 // BEGIN 57 for (vector<Wrapper*>::iterator it = vec.begin(); it != vec.end(); ++it) 58 { 59 cout << *it << "\n"; //アドレスが表示される。 60 } 61 // END 62 // deleteは省略 63 return 0; 64}
実行結果
0xe027d0 0xe027d8 0xe027e0 0xe027e8
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/30 08:01