| // dscombine_poly.h #include <iostream> #include <vector> // 公共抽象基类Vehicle class Vehicle { public: virtual void run() const = 0; }; // 派生于Vehicle的具体类Car class Car: public Vehicle { public: virtual void run() const { std::cout << "run a car\n"; } }; // 派生于Vehicle的具体类Airplane class Airplane: public Vehicle { public: virtual void run() const { std::cout << "run a airplane\n"; } void add_oil() const { std::cout << "add oil to airplane\n"; } }; // 派生于Vehicle的具体类Airship class Airship: public Vehicle { public: virtual void run() const { std::cout << "run a airship\n"; } void add_oil() const { std::cout << "add oil to airship\n"; } }; |
| // dscombine_poly.cpp #include <iostream> #include <vector> #include "dscombine_poly.h" // run异质vehicles集合 void run_vehicles(const std::vector<Vehicle*>& vehicles) { for (unsigned int i = 0; i < vehicles.size(); ++i) { vehicles[i]->run(); // 根据具体的vehicle类型调用对应的run() } } // 为某种特定的aircrafts同质对象集合进行“空中加油” template <typename Aircraft> void add_oil_to_aircrafts_in_the_sky(const std::vector<Aircraft>& aircrafts) { for (unsigned int i = 0; i < aircrafts.size(); ++i) { aircrafts[i].add_oil(); } } int main() { Car car1, car2; Airplane airplane1, airplane2; Airship airship1, airship2; std::vector<Vehicle*> v; // 异质vehicles集合 v.push_back(&car1); v.push_back(&airplane1); v.push_back(&airship1); run_vehicles(v); // run不同种类的vehicles std::vector<Airplane> vp; // 同质airplanes集合 vp.push_back(airplane1); vp.push_back(airplane2); add_oil_to_aircrafts_in_the_sky(vp); // 为airplanes进行“空中加油” std::vector<Airship> vs; // 同质airships集合 vs.push_back(airship1); vs.push_back(airship2); add_oil_to_aircrafts_in_the_sky(vs); // 为airships进行“空中加油” } |