是的,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;
}
}
現在,你可以創(chuàng)建一個Circle
對象并將其存儲在Shape
對象的向量中。當你調用processShapes
函數時,它將自動處理對象切片并輸出每個形狀的面積:
int main() {
std::vector<Shape> shapes = {Circle(5), Circle(3)};
processShapes(shapes);
return 0;
}
這個例子展示了如何通過使用函數模板和面向對象編程的概念來自定義處理C++對象切片的邏輯。你可以根據需要修改processShapes
函數以實現其他處理邏輯。