在C ++中将派生类类型的向量链接到父类类型的向量

时间:2013-11-14 18:09:01

标签: c++ inheritance vector

我处于C ++的初级阶段。假设我有一个基类和一个派生类:

class Base{
 ....

}

class Derived:public Base{

 ....
}

现在我有两个向量,如下所示,我将对一些创建基础和派生对象执行一些操作,并将这些对象分别推回到相应的向量:

std::vector<Base*> baseVector
std::vector<Derived*> derivedVector

我想将derivedVector的每个元素(对象)指向baseVector的每个元素(对象)。假设derivedVector [2]将有一个指向baseVector [2]的指针,以便我可以随时从派生对象访问基础对象。我该怎么做?

4 个答案:

答案 0 :(得分:2)

你的意思并不是很清楚,但如果我理解正确你想在两个向量中指向你的Derived对象。你可以这样做:

baseVector[2] = derivedVector[2] = new Derived();

答案 1 :(得分:0)

看看是否要使用基本列表来包含派生对象指针,那么就可以了。但你不能使用派生列表来保存基本指针。

可能是你想要的东西。

Base * pBase = new Base();
Derived *pDerived_1 = new Derived();
// or
Base *pDerived_2 = (Base *)new Derived();
// this can be anytime casted back
Derived *pDerived_3 = (Derived*)pDerived_2;

// you can also push them into base vector
lstBasePtr.push_back(pBase);
lstBasePtr.push_back(pDerived_1);
lstBasePtr.push_back(pDerived_2);
lstBasePtr.push_back(pDerived_3);

答案 2 :(得分:0)

我认为这是你问题的重要部分:

  

...以便我可以随时从派生对象访问基础对象。

答案很简单。通过继承,派生对象可以访问其基础对象。 这就是继承的全部要点。

你可以保持简单:

class Base{
    SomeBaseFunction();
}

class Derived : public Base{
    // Do not add a Base* here.
}

int main() {
    Derived *derived_object = new Derived();
    derived_object->SomeFunction();  // this works.
}

你应该在这里更清楚地考虑你的vector。你可能只需要一个矢量,而不是两个。此外,您应该处理vector<Derived>,而不是vector<Derived*>

int main () {
    Derived derived_object;   // don't use `new` here, it's just awkward

    vector<Derived>  vector_of_objects;
    vector_of_objects.push_back(derived_object);
}

在现代C ++中,无论您是初学者还是专家,都不应经常使用*new

答案 3 :(得分:-1)

非常感谢您的回复。我已经弄明白了我需要做什么。不确定它是否是最聪明的方式,如果没有请建议我。

我是这样做的:

class Base{
    SomeBaseFunction();

}

class Derived:public base{
//I have put a pointer of base type here 
base *basePointer;
}

现在在主要功能中,我基本上填充了基础和派生向量,我执行以下操作:

derivedObject->basePointer = baseObject;

现在我可以按如下方式访问基本属性:

derivedObject->basePointer->SomeBaseFunction();