我处于C ++的初级阶段。假设我有一个基类和一个派生类:
class Base{
....
}
class Derived:public Base{
....
}
现在我有两个向量,如下所示,我将对一些创建基础和派生对象执行一些操作,并将这些对象分别推回到相应的向量:
std::vector<Base*> baseVector
std::vector<Derived*> derivedVector
我想将derivedVector的每个元素(对象)指向baseVector的每个元素(对象)。假设derivedVector [2]将有一个指向baseVector [2]的指针,以便我可以随时从派生对象访问基础对象。我该怎么做?
答案 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();