私はC++の継承について学びたいと思っています。私はvector::vector
のサブクラスには、ポインタがstring
しかかからないようにしようとしています。Vector :: Vectorの継承継承クラス
ポインタと参照の私のグリップは確かに弱いですが、次のコードは、同じアドレスに各string
を設定している理由は、私は私の人生のために働くことができない:私はのように実行すると
#include <iostream>
#include <vector>
using namespace std;
class StringVector : public vector<void*> {
public:
void push_back(const string* str) {
vector::push_back(&str);
}
string* operator[](int pos) {
return (string*)vector::operator[](pos);
}
};
main() {
StringVector sv;
string str1 = "hello";
string str2 = "world";
sv.push_back(&str1);
sv.push_back(&str2);
for (int i = 0; i < 2; i++)
cout << sv[i] << " ";
}
ですが、私は得る:
0xffffcb68 0xffffcb68
すなわち同じアドレス。
私がsv[i]
(つまり*sv[i]
)を尊敬しようとすると、私は例外を得る。私がどこに間違っているのか誰にでも教えてくれますか?
私はポインターと参照によって非常にすぐに混乱する唯一の人ですか?私は私が知的だと思っていました! – Aidenhjj
ポインタが混乱しています。幸運なことに、現代のC++やC++ 03以降のように直接扱う必要はありません。難しい経験を持つ人々によって書かれた優れたリソースがあります。あなたは実験や学習によって正しいことをやっています。 –
あなたが問題を無関心の1つの領域に限定することができれば、あなたは両方とも個別に快適になるまで継承とポインタを混ぜることをお勧めします。 –