#include <iostream>
#include <vector>
#include <algorithm>
class Base {
public:
virtual int getValue() const = 0;
virtual ~Base() = default;
};
class Derived1 : public Base {
public:
Derived1(int val) : value(val) {}
int getValue() const override { return value; }
private:
int value;
};
class Derived2 : public Base {
public:
Derived2(int val) : value(val) {}
int getValue() const override { return value; }
private:
int value;
};
bool compare(Base* a, Base* b) {
return a->getValue() < b->getValue();
}
int main() {
std::vector<Base*> vec;
vec.push_back(new Derived1(3));
vec.push_back(new Derived2(1));
vec.push_back(new Derived1(2));
std::sort(vec.begin(), vec.end(), compare);
for (Base* ptr : vec) {
std::cout << ptr->getValue() << " ";
delete ptr;
}
std::cout << std::endl;
return 0;
}
- 首先定义
Base
类,包含一个纯虚函数getValue
用于获取value
值,同时定义虚析构函数,防止内存泄漏。
Derived1
和Derived2
类继承自Base
类,并实现getValue
函数。
- 定义一个比较函数
compare
,用于比较两个Base
指针指向对象的value
值。
- 在
main
函数中,创建Derived1
和Derived2
对象的指针并放入std::vector<Base*>
中。
- 使用
std::sort
算法对容器中的指针按value
值升序排序。
- 最后输出排序后的
value
值,并释放动态分配的内存。