在vector
以下是一个示例代码,展示了如何解决对象切片问题:
#include
#include
#include
class Base {
public:
virtual void print() const = 0;
};
class Derived : public Base {
public:
void print() const override {
std::cout << "Derived class" << std::endl;
}
};
int main() {
std::vector> vec;
// 使用std::make_shared创建Derived类的对象,并将其添加到vector中
vec.push_back(std::make_shared());
// 调用多态函数print
for (const auto& item : vec) {
item->print();
}
return 0;
}
在上面的代码中,我们定义了一个纯虚基类Base,并在Derived类中实现了纯虚函数print。然后,我们使用std::make_shared创建Derived类的对象,并将其添加到vector中。在循环中,我们调用item->print(),由于item是一个指向Base类的指针,但实际上指向的是Derived类的对象,所以会调用Derived类的print函数。
通过使用多态性,我们可以避免在vector