stl,boost中几乎所有容器都采用的是模版类+模版算法的方式实现多态,因为其效率更高!究其原因,静态编译
/* * File: main.cpp * Author: Vicky.H * */ #include <iostream> /**动物*/ class Animal { public: virtual ~Animal() { }; virtual void eat() = 0; virtual void sleep() = 0; virtual void breed() = 0; }; /**哺乳动物*/ class Mammal : public Animal { public: ~Mammal() { std::cout << "delete Mammal" << std::endl; } void eat() { } void sleep() { } void breed() { std::cout << "哺乳动物胎生繁殖" << std::endl; } }; /**卵生动物*/ class Ovipara : public Animal { public: ~Ovipara() { std::cout << "delete Ovipara" << std::endl; } void eat() { } void sleep() { } void breed() { std::cout << "卵生动物产卵繁殖" << std::endl; } }; template <typename T> void breed(T& o) { std::cout << "void breed(T& o)" << std::endl; o.breed(); } template <typename T> void breed(const T& o) { /**重点:: 这里如需要const特化的话,需要所有的成员函数以const修饰*/ std::cout << "void breed(const T& o)" << std::endl; o.breed(); } template <typename T> void breed(T* p) { std::cout << "void breed(T* p)" << std::endl; p->breed(); } template <typename T> void breed(const T* p) { std::cout << "void breed(const T* p)" << std::endl; p->breed(); } class A { public: void breed() const { std::cout << "哺乳动物胎生繁殖" << std::endl; } }; class B { public: void breed() const { std::cout << "卵生动物产卵繁殖" << std::endl; } }; /* * */ int main(void) { Animal* a1 = new Mammal; a1->breed(); Animal* a2 = new Ovipara; a2->breed(); delete a1; delete a2; std::cout << "---------------------------" << std::endl; A a; const B b; breed(a); breed(b); breed(&a); breed(&b); std::cout << "可以使用继承方式创建逻辑结构,然后删除父类,将抽象函数定义对应的模版函数将继承方式转向模版方式,相对而言,模版采用静态时编译与多态的动态时编译性能更高" << std::endl; return 0; }