再谈C++的多态性

1.深入理解多态:

多态性可以理解为“一个接口,多种形态”,它是面向对象思想的核心(polymorphism),C++的多态性是通过虚函数来实现的,虚函数是用Virtual关键字来修饰的,基类的虚函数在派生类中可以通过重写虚函数来实现对基类的覆盖,又叫函数隐藏,派生类中重写了虚函数才是多态性的充分体现。

2.多态的用法:

开发中用的最多的就是声明基类的指针,利用该指针指向子类中的对象,调用相应的虚函数,可以根据指向不同的子类,来实现不同的方法的调用。假如没有虚函数,利用基类的指针调用相应的函数的时候,总是被限制在基类的本身,无法调用子类中被重写的函数,没有了多态性,函数的地址将会变成固定的,固定的地址始终调用到同一个函数,这样就无法实现一个借口,多种方法的目的了!

3.多态的作用

多态的主要目的就是实现接口的重用,不论传递过来的是那个类的对象,函数都能通过同一个接口来调用到适应各自对象的方法。

伪代码如下:

class Base

{

  public:

virtual void fuu()

{

cout<<"Base"<<endl;

}

};

class Derived:public Base

{

public:

void fuu()

{

cour<<"Derived"<<endl;

}

};

int main()

{

Base *p=new Derived();

        p->fuu();

        return 0;

}

打印结果:

Derived

结论:此处重写虚函数来体现C++的多态性,基类的指针P指向派生类的对象时,实际调用了基类中被重写的fuu()函数。


喜欢的请给小编点赞和关注,您的认可是小编前进的动力!

//Base.h

class Base

{

      public:

          void show1();

          virtual void show2();

};

//Base.cpp

void Base::show1()

{

    ...........

}

void Base::show2()

{

  .......

}

//chlid.h

class Child:public Base

{

    public:

        char x;

       void show1();

     virtual void show2();

};

int main()

{

    Child child;

    Base *p_base=&child;

    p_base->show1();  //Base

     p_base->show2();   //child

   

    Base &r_base=child;

    r_base.show1();  //Base    普通函数看指针是由哪个类创建的就调用哪个类的普通函数

    r_base.show2();  //child    虚函数看指针指向的是哪个类就调用哪个类里面的虚函数

}

注明:使用对象的指针访问普通函数时,只看指针所属类,也就是说看指针是由哪个类创建的,访问到的函数是指针所属类中的函数。

         使用对象的指针访问虚函数时,只看指针指向的对象所属类,也就是说指针指向的哪个类,访问到的函数是指针指向的对象所属类的虚函数。

3.动态编译:







猜你喜欢

转载自blog.csdn.net/Makefilehoon/article/details/78878719