| // macro_poly.cpp #include <iostream> #include <string> // 定义泛化记号:宏ADD #define ADD(A, B) (A) + (B); int main() { int i1(1), i2(2); std::string s1("Hello, "), s2("world!"); int i = ADD(i1, i2); // 两个整数相加 std::string s = ADD(s1, s2); // 两个字符串“相加” std::cout << "i = " << i << "\n"; std::cout << "s = " << s << "\n"; } |
| 1 + 2 = 3 Hello, + world! = Hello, world! |
| // dynamic_poly.h #include <iostream> // 公共抽象基类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"; } }; |
| // dynamic_poly_1.cpp #include <iostream> #include <vector> #include "dynamic_poly.h" // 通过指针run任何vehicle void run_vehicle(const Vehicle* vehicle) { vehicle->run(); // 根据vehicle的具体类型调用对应的run() } int main() { Car car; Airplane airplane; run_vehicle(&car); // 调用Car::run() run_vehicle(&airplane); // 调用Airplane::run() } |
| // dynamic_poly_2.cpp #include <iostream> #include <vector> #include "dynamic_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() } } int main() { Car car; Airplane airplane; std::vector<Vehicle*> v; // 异质vehicles集合 v.push_back(&car); v.push_back(&airplane); run_vehicles(v); // run不同类型的vehicles } |