在面向对象编程中,抽象类是一种不能被实例化的类,它通常包含一个或多个纯虚函数。抽象类的主要目的是为派生类提供一个公共的接口。指向抽象类的指针列表可以用于管理和操作这些派生类的对象。
virtual void func() = 0;
。std::vector<T*>
。假设我们有一个抽象类 Shape
和两个派生类 Circle
和 Square
,我们希望创建一个指向 Shape
的指针列表。
#include <iostream>
#include <vector>
// 抽象类
class Shape {
public:
virtual void draw() const = 0; // 纯虚函数
virtual ~Shape() = default; // 虚析构函数
};
// 派生类 Circle
class Circle : public Shape {
public:
void draw() const override {
std::cout << "Drawing a Circle" << std::endl;
}
};
// 派生类 Square
class Square : public Shape {
public:
void draw() const override {
std::cout << "Drawing a Square" << std::endl;
}
};
int main() {
// 创建指向抽象类的指针列表
std::vector<Shape*> shapes;
// 添加派生类对象到列表
shapes.push_back(new Circle());
shapes.push_back(new Square());
// 遍历列表并调用 draw 方法
for (const auto& shape : shapes) {
shape->draw();
}
// 清理内存
for (auto shape : shapes) {
delete shape;
}
return 0;
}
std::unique_ptr
或 std::shared_ptr
)来自动管理内存。#include <memory>
int main() {
std::vector<std::unique_ptr<Shape>> shapes;
shapes.push_back(std::make_unique<Circle>());
shapes.push_back(std::make_unique<Square>());
for (const auto& shape : shapes) {
shape->draw();
}
// 不需要手动释放内存
return 0;
}
通过这些方法,可以有效地管理和操作指向抽象类的指针列表,同时避免常见的问题。
领取专属 10元无门槛券
手把手带您无忧上云