多态.xml

pre{
line-height:1;
color:#1e1e1e;
background-color:#f0f0f0;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#1e1e1e;}
.operator {color:#008000;font-weight:bold;}

多态

 

何为多态?

多态即是多种形态。

多种形态是指一个事物的某种属性会出现多个不同的状态。

比如:云的形状  可能是圆 可能是椭圆  可能是马的样子 也可能是牛的样子

又如鸟:  有的鸟会飞 有的鸟不会飞,有的鸟飞的高、有的鸟飞的低

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);       

重载

重载指的是函数的重载,在编译时就确定了。在此不再做介绍

本文使用 书画小说软件 发布,内容与软件无关,书画小说软件 更惬意的读、更舒心的写、更轻松的发布。

 

上一篇:linux命令小常识


下一篇:codevs 3119 高精度练习之大整数开根 (各种高精+压位)