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



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

class Base{
 ....
}
class Derived:public Base{
 ....
}

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

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

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

你的意思不是很清楚,但是如果我理解正确,你想在两个向量中放置指向Derived对象的指针。您可以通过以下方式实现它:

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

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

。这样我可以随时从派生对象访问基对象。

答案相当简单。 通过继承,派生对象已经可以访问其基对象。 这就是继承的全部意义。

您可以保持简单:

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

看看如果你想使用基列表来包含派生的对象指针,那么没关系。 但不能使用派生列表来保存基指针。

也许你想要类似的东西。

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);
嗨,

感谢您的回复。我已经弄清楚我需要做什么。不确定这是否是最聪明的方式,如果不是,请建议我。

这是我是如何做到的:

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

现在,在我基本上填充基向量和派生向量的主函数中,我执行以下操作:

derivedObject->basePointer = baseObject;

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

derivedObject->basePointer->SomeBaseFunction();

最新更新