是的,C++对象切片可以自定义处理逻辑
首先,定义一个基类Shape
和一个派生类Circle
:
#include <iostream>
#include <cmath>
class Shape {
public:
virtual ~Shape() = default;
virtual double area() const = 0;
};
class Circle : public Shape {
public:
Circle(double radius) : radius_(radius) {}
double area() const override {
return M_PI * radius_ * radius_;
}
private:
double radius_;
};
接下来,定义一个函数模板processShapes
,它接受一个Shape
对象的向量,并对其进行处理:
template<typename T>
void processShapes(const std::vector<T>& shapes) {
for (const auto& shape : shapes) {
std::cout << "Area: " << shape.area() << std::endl;
}
}
现在,你可以创建一个Circle
对象并将其存储在Shape
对象的向量中。当你调用processShapes
函数时,它将自动处理对象切片并输出每个形状的面积:
int main() {
std::vector<Shape> shapes = {Circle(5), Circle(3)};
processShapes(shapes);
return 0;
}
这个例子展示了如何通过使用函数模板和面向对象编程的概念来自定义处理C++对象切片的逻辑。你可以根据需要修改processShapes
函数以实现其他处理逻辑。