-1
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
class base {
int data;
public:
base(int d = 100) : data(d) {}
virtual int getData() const {return data;}
};
class derived : public base {
int dData;
public:
derived(int dd = 32) : base(), dData(dd) {}
virtual ~derived(){}
int getData() const {return dData;}
};
int main(){
std::vector<base> vec;
base A(20);
derived B(32);
vec.push_back(A);
vec.push_back(B);
for(unsigned int i=0; i < vec.size(); i++)
cout << "vector[" << i << "] :" << vec[i].getData() << endl;
base * ptr;
ptr = &A;
cout << "Base pointing: " << ptr->getData() << endl;
ptr = &B;
cout << "Derived pointing: " << ptr->getData() << endl;
}
上記のコードの上で、私は基底の型であるベクトルを作成し、そこに派生オブジェクトを入れます。私が値を読み取ろうとすると、私は正しいものを得ることができません。私は私のクラスで同じ名前を持つ関数の前に 'virtual'ステートメントを置いています。しかし、ポインタの方法で問題はありません。ベクトルの多型
ここにコードの出力があります。
vector[0] :20
vector[1] :100
Base pointing: 20
Derived pointing: 32
実行時の多型はポインタと参照に作用します。あなたのベクトルには塩基が含まれているので、基本メソッドが呼び出されます。 – user1438832