2016-12-20 15 views
-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; 

} 

Oberhalb des Codes, ich einen Vektor, der Art der Basis ist und ein abgeleitetes Objekt in es setzen. wenn ich versuche, die werte zu lesen, kann ich nicht die richtigen bekommen. Obwohl ich eine 'virtuelle' Anweisung vor die gleichnamige Funktion in meinen Klassen gesetzt habe. Aber in Zeigerweise gibt es kein Problem.Polymorphie in einem Vektor

Hier ist die Ausgabe von Code.

vector[0] :20 
vector[1] :100 
Base pointing: 20 
Derived pointing: 32 
+0

Laufzeit Polymorphismus funktioniert auf Zeiger und Referenzen.Ihr Vektor enthält Basis so Basismethode aufgerufen. – user1438832

Antwort

0
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; 

} 

Nun, wenn ich Zeiger Basisvektor zu verwenden, gibt es die richtigen Werte. Danke für deine Antworten.