溫馨提示×

C++對象切片能自定義處理邏輯嗎

c++
小樊
81
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;
    }
}

現在,你可以創(chuàng)建一個Circle對象并將其存儲在Shape對象的向量中。當你調用processShapes函數時,它將自動處理對象切片并輸出每個形狀的面積:

int main() {
    std::vector<Shape> shapes = {Circle(5), Circle(3)};
    processShapes(shapes);

    return 0;
}

這個例子展示了如何通過使用函數模板和面向對象編程的概念來自定義處理C++對象切片的邏輯。你可以根據需要修改processShapes函數以實現其他處理邏輯。

0