c++面向对象10-------c++多态

术语“多态”(Polymorphism)是”poly“ + “morphs“的组合,其意味着多种形式。 这是一个希腊词。 在面向对象编程中,我们使用3个主要概念:继承,封装和多态。

C++中有两种类型的多态:

  • 编译时多态性:通过函数重载和操作符重载来实现,这也称为静态绑定或早期绑定。
  • 运行时多态性:它通过方法覆盖来实现,也称为动态绑定或后期绑定。

C++运行时多态性示例

下面来看看一个简单的C++运行时多态的例子。

#include <iostream>  
using namespace std;  
class Animal {  
    public:  
void eat(){    
cout<<"Eating...";    
    }      
};   
class Dog: public Animal    
{    
 public:  
 void eat()    
    {    
       cout<<"Eating bread...";    
    }    
};  
int main(void) {  
   Dog d = Dog();    
   d.eat();  
   return 0;  
}
C++

运行上面代码,得到以下结果 -

Eating bread...
C++

C++运行时多态性示例:通过使用两个派生类

下面来看看看C++中的运行时多态性的另一个例子,下面有两个派生类。

#include <iostream>  
using namespace std;  
class Shape {  
    public:  
virtual void draw(){    
cout<<"drawing..."<<endl;    
    }      
};   
class Rectangle: public Shape    
{    
 public:  
 void draw()    
    {    
       cout<<"drawing rectangle..."<<endl;    
    }    
};  
class Circle: public Shape    
{    
 public:  
 void draw()    
    {    
       cout<<"drawing circle..."<<endl;    
    }    
};  
int main(void) {  
    Shape *s;  
    Shape sh;  
        Rectangle rec;  
        Circle cir;  
        s=&sh;  
     s->draw();   
        s=&rec;  
     s->draw();    
    s=○  
     s->draw();   
}
C++

运行上面代码,得到以下结果 -

drawing...
drawing rectangle...
drawing circle...
C++

运行时多态性与数据成员

运行时多态性可以通过C++中的数据成员来实现。 下面来看看一个例子,通过引用变量访问字段,引用变量引用派生类的实例。

#include <iostream>  
using namespace std;  
class Animal {  
    public:  
    string color = "Black";    
};   
class Dog: public Animal   
{    
 public:  
    string color = "Grey";    
};  
int main(void) {  
     Animal d= Dog();    
    cout<<d.color;   
}
C++

运行上面代码,得到以下结果 -

Black
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值