在C++中将派生类类型的向量链接到父类类型的向量
linking vector of derived class type to vector of parent class type in 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();
相关文章:
- 基类类型向量中的派生结构
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- C++ - 按自定义数据类型向量的值删除元素
- 在 C++ 中创建类型向量
- 添加字符串向量和不同数据类型向量的映射
- 初始化一个类型向量的巨大向量<int>
- 没有操作员=的类型向量的实例化
- 复杂数据类型向量的迭代器
- 比较两个用户定义的类型向量
- 如何声明二维模板化类类型向量?
- 尝试将用户定义的向量类型插入用户定义的类型向量
- 类类型向量的打印内容
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- 如何使用新字符串而不是分配器创建自己的字符串类型向量?
- <T> 在使用运算符+ 连接两个向量之前从类型向量中删除索引
- 从自定义数据类型向量数组C 删除
- 如何打印类型向量<元组<字符串、int、int>> 以筛选 c++?
- 正在输出类型向量的成员类型
- 引用类类型向量中的对象成员