多态
?
何为多态?
多态即是多种形态。
多种形态是指一个事物的某种属性会出现多个不同的状态。
比如:云的形状??可能是圆?可能是椭圆??可能是马的样子?也可能是牛的样子
又如鸟:??有的鸟会飞?有的鸟不会飞,有的鸟飞的高、有的鸟飞的低
C++中?实现?即是?:?一个接口,多种实现
运行时多态
?
在计算机中,如何描述这种多态?
主要的使用方法乃是?继承机制
比如云是基类,各种形状的云是派生类,比如鸟是基类,各种飞行的鸟是派生类。
?
程序要调用各个派生类的某个描述公共属性的方法,如果为每个派生类写一个调用方法,显然是很浪费的。
由此,C++引人了虚函数概念。
?
通过虚函数,将派生类的调用,转换为基类指针的操作。
为基类指针赋予不同派生类对象的地址,就可以操纵各个派生类中继承自基类的虚函数。
这样,只需对基类指针处理,就实现了操作各个派生类。
?
示例:
? class?Bird { public: ?????????virtual?void?fly() ?????????{ ???????????????????cout<<"Bird?Can?Fly"<<endl; ?????????} }; ? class?Duck:public?Bird { public: ?????????void?fly() ?????????{ ???????????????????cout<<"DUCK?can?not?fly"<<endl; ?????????} }; ? class?Chicken:public?Bird { public: ?????????void?fly() ?????????{ ???????????????????cout<<"Chicken?can?not?fly"<<endl; ?????????} ? }; ? ? void?Fly(Bird?*pFly) { ?????????pFly->fly(); } ? ? ? ? ? ? ? void?main() { ? ? ?????????Bird?bird; ?????????Duck?duck; ?????????Chicken?chicken; ? ?????????Fly(&bird); ?????????Fly(&duck); ?????????Fly(&chicken); ? ? ? ? ? ?????????while?(getchar()!=‘0‘) ?????????{ ?????????}??????? } ? ?
静态多态
?
静态多态是指通过模板函数的方式实现多态。
?
适用于:各个类是单独定义?但是它们具有相同的操作,这个相同的操作便可通过模板函数的方式调用
?
比如:
? Template?<class?T> Void?DoSomething(T?&t) { t.doSomething(); } ?
示例:
class?Duck: ?{ public: ?????????void?fly() ?????????{ ???????????????????cout<<"DUCK?can?not?fly"<<endl; ?????????} }; ? class?Chicken: { public: ?????????void?fly() ?????????{ ???????????????????cout<<"Chicken?can?not?fly"<<endl; ?????????} ? }; ? template?<class?T> ? void?Fly(T?&t) { ?????????t.fly(); ? } ? ? ?????????Duck?duck; ????????Chicken?chicken; ? ?????????Fly(duck);????????????//编译器在编译时?会自动处理为?Fly<Duck>() ????????Fly(chicken);???????
重载
重载指的是函数的重载,在编译时就确定了。在此不再做介绍
本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。
原文:http://www.cnblogs.com/shuilan0066/p/4032257.html