【问题标题】:polymorphism in a vector [duplicate]向量中的多态性
【发布时间】:2016-12-20 10:57:26
【问题描述】:
#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;

}

在代码上方,我创建了一个基类型的向量并将派生对象放入其中。当我尝试读取值时,我无法获得正确的值。即使我在我的类中具有相同名称的函数之前放置了“虚拟”语句。但是以指针方式没有问题。

这是代码的输出。

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

【问题讨论】:

  • 运行时多态性适用于指针和引用。您的向量包含基础,因此调用基础方法。

标签: c++ pointers vector polymorphism


【解决方案1】:
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;

}

好吧,当我使用指针基向量时,它会给出正确的值。谢谢你的回答。

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多