温馨提示×

C++对象切片能自定义处理逻辑吗

c++
小樊
82
2024-11-09 06:18:34
栏目: 编程语言

是的,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函数以实现其他处理逻辑。

0