在C++中,将std::vector<DerivedClass*>
转换为std::vector<BaseClass*>
是一个常见的操作,因为派生类对象可以被视为基类对象。这种转换是安全的,因为派生类指针可以隐式地转换为基类指针。以下是如何进行这种转换的详细步骤和示例代码:
static_cast
。dynamic_cast
(在本场景中不适用,因为转换是安全的)。以下是一个简单的示例,展示了如何进行这种转换:
#include <iostream>
#include <vector>
// 基类
class BaseClass {
public:
virtual ~BaseClass() = default;
virtual void display() const {
std::cout << "BaseClass" << std::endl;
}
};
// 派生类
class DerivedClass : public BaseClass {
public:
void display() const override {
std::cout << "DerivedClass" << std::endl;
}
};
int main() {
// 创建一个包含派生类指针的向量
std::vector<DerivedClass*> derivedVector;
derivedVector.push_back(new DerivedClass());
derivedVector.push_back(new DerivedClass());
// 将派生类指针向量转换为基类指针向量
std::vector<BaseClass*> baseVector(derivedVector.begin(), derivedVector.end());
// 使用基类指针调用虚函数
for (const auto& ptr : baseVector) {
ptr->display();
}
// 清理内存
for (auto& ptr : derivedVector) {
delete ptr;
}
return 0;
}
BaseClass
是基类,DerivedClass
是从BaseClass
派生的类。derivedVector
存储了DerivedClass
对象的指针。derivedVector
的内容复制到baseVector
中。这里利用了C++标准库容器的构造函数,它可以接受两个迭代器来初始化容器。display()
,实际执行的是派生类中的实现,展示了多态性。通过这种方式,你可以安全且高效地将派生类指针向量转换为基类指针向量,充分利用C++的多态特性。
领取专属 10元无门槛券
手把手带您无忧上云