虚函数,纯虚函数和多态

本文详细解释了C++中的虚函数和纯虚函数的概念及其定义方式,并通过实例展示了如何利用虚函数实现多态。同时介绍了多态的基本概念及其实现方式,并对比了C++与Java中实现多态的不同之处。

1.虚函数和纯虚函数(C,C++)

    定义方式

        虚函数:virtual void fun();可在父类中直接实现和定义父类的对象,也可在子类中重写父类中定义的虚函数。

        纯虚函数:virtual void fun()=0;只能在父类(虚基类)中定义,继承的子类必须实现父类中的纯虚函数的功能。

    执行方式:执行过程是动态联编的,即在程序运行时进行关联或束定。且动态联编只能通过指针和引用方式来操作虚函数。

    共同点:一般是通过定义基类的指针和引用,然后将该指针或引用指向不同的的子类对象,在调用对应的虚函数。

2.多态的定义

   多态就是通过类的继承,使得同一个函数可以根据调用它的对象的类型的不同做出不同的响应。定义的父类对象的引用或指针只能访问子类从父类继承来的方法。

   在C++中通过虚函数来实现的,在java中,对象变量是多态的,没有虚函数的概念。

如下Java中实现多态的例子:

class Vehicle
{
     public:
     void drive();
};
class Car extends Vehicle
{//Java中只有共有继承,用extends表示
     public:
     void drive(){
     cout<<"启动轿车"<<endl; 
}
};
class Truck extends Vehicle
{
     public:
        void drive(){
           cout<<"启动卡车"<<endl; 
         }
};
Vehicle v1;//定义基类对象v1
v1=new Car();
v1.drive();//输出“启动轿车”
v1=new Truck();
v1.drive();//输出“启动卡车”

在C++实现对态:
class Vehicle
{
     public:
     virtual  void drive()=0;
};
class Car:public Vehicle
{//Java中只有共有继承,用extends表示
     public:
     void drive(){
     cout<<"启动轿车"<<endl; 
}
};
class Truck:public Vehicle
{
     public:
        void drive(){
           cout<<"启动卡车"<<endl; 
         }
};
Vehicle *v1;//定义基类指针v1
Car c;
Truck t;
v1=&c;
v1->drive();//输出“启动轿车”
v1=&t;
v1->drive();//输出“启动卡车”
3.子类和父类的转换
  子类对象转父类:可直接利用多态的性质进行转换。
  父类转子类:一般先使用instancesof运算符判断能否进行转换(是否有继承关系),然后用(子类type)父类对象的方法进行强制类型转换。
 instancesof运算符的使用:A instancesof B,A是类B类型的对象或类B的父类。













                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值