c++ - 指向派生派生类的 vector 的指针

标签 c++ class inheritance

我正在尝试拥有一个指向不同类 vector 的指针 vector ,其中每个类都派生自相同的基类。

我的代码:

#include <iostream> 
#include <vector> 
#include <stdlib.h> 

class A 
{ 
public: 
    A() { std::cout << "A constructor.\n"; } 
    virtual ~A() { std::cout << "A destructor\n"; } 

    virtual void iAm() { std::cout << "I am A.\n"; } 
}; 

class B : public A 
{ 
public: 
    B() { std::cout << "B constructor.\n"; } 
    ~B() { std::cout << "B destructor.\n"; } 

    virtual void iAm() { std::cout << "I am B.\n"; } 
private:
    std::string s;
}; 

class C : public A 
{ 
public: 
    C() { std::cout << "C constructor.\n"; } 
    ~C() { std::cout << "C destructor.\n"; } 

    virtual void iAm() { std::cout << "I am C.\n"; } 
private:
    std::string s;
    int n;
}; 

int main() 
{
    std::vector<std::vector<A>*> vect;
    vect.resize(3);

    vect[0]=new std::vector<A>;
    vect[1]=(std::vector<A>*) new std::vector<B>;
    vect[2]=(std::vector<A>*) new std::vector<C>;

    vect[0]->push_back(A());
    vect[0]->push_back(A());
    vect[1]->push_back(B(methods are A methods));
    vect[1]->push_back(B());
    vect[2]->push_back(C());
    vect[2]->push_back(C());

    (*vect[0])[0].iAm();
    (*vect[0])[1].iAm();
    (*vect[1])[0].iAm();
    (*vect[1])[1].iAm();
    (*vect[2])[0].iAm();
    (*vect[2])[1].iAm();

}

但是执行给我:

A constructor.

A destructor.

A constructor.

A destructor.

A destructor.

A constructor.

B constructor.

B destructor.

A destructor.

A constructor.

B constructor.

A destructor.

B destructor.

A destructor.

A constructor.

C constructor.

C destructor.

A destructor.

A constructor.

C constructor.

A destructor.

C destructor.

A destructor.

I am A.

I am A.

I am A.

I am A.

I am A.

I am A.

我不明白为什么,虽然我创建了BC对象,方法iAm()的调用调用了A 的 iAm()BC的调用iAm()必须调用BC的版本code> 因为构造函数是 BC 并且因为我只是将指针转换为 vector ,而不是 vector 中的元素。

我对此有什么不理解的?

谢谢。

最佳答案

你的错误是你假设std::vector<B>std::vector<A> 兼容因为 B 是从 A 派生的。事实并非如此。 A和B之间的继承关系不转化为std::vector<A>之间的继承关系和 std::vector<B> .您必须使用 C 风格的转换来消除编译器的错误消息,但这并不能解决问题。

关于c++ - 指向派生派生类的 vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44749750/

相关文章:

C++:调用派生类的虚函数

python - 如何在 Python 3 中创建具体父类(super class)的抽象子类?

c++ - c++中的 vector 下标超出范围错误

c++ - 替代 map<someKey , map<anotherKey,Identifier >>

jquery - 选项卡内容中的任何 DIV 都不能出现

c++ - 在堆栈或堆上创建的类成员?

c++ - 前向声明静态函数 C++

c++ - PCL 库和并发

java - 对象初始化 - Java

angular - 扩展已注入(inject)服务的类而不在子类中重复注入(inject)器?