• c++多态


    多态应该是各种面试中都会问的问题了,那么多态肯定很重要,具体有什么作用呢?我在这里记录下我的了解,以后不断补充

    封装:隐藏实现的细节,让代码模块化。

    继承:可以扩展已经存在的代码模块(类)。

    多态:

    1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承 
    2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

    就是说你想调用一个函数功能,但是这个功能根据具体的对象实现的过程不同。我们可以先定义一个这类对象共同的属性和功能抽象出一个基类,其中的因对象不同的功能函数就用虚函数,然后具体的子类就继承这个类,并重写虚函数,覆盖父类的虚函数。

    这样有什么用呢?

    class Base{

    public:

    virtual void fun(){cout<<"ch1";}

    };

    class Ch1:public Base{

    public:

    void fun(){cout<<"ch1";}

    };

    class Ch2:public Base{

    public:

    void fun(){cout<<"ch2";}

    };

    比如我们的程序要调用一个函数fun(),这个对象可能是base,Ch1或Ch2甚至Ch3....

    如果我们不用虚函数,调用的话就要判断一下

    如果是Base b,这样调用:b.fun();

    如果是Ch1 c1,这样调用:c1.fun();

    如果是Ch2 c2,这样调用:c2.fun();

    如果我们用虚函数

    将父类指针指向子类,只要调用父类的fun()就行了

    Ch1 c1;

    Ch2 c2;

    Base *pb;

    具体是c1就这样:pb=&c1;

    如果是c2就:pb=&c2;

    只要调用pb->fun()就能调用具体子类的函数了。

    还有就是在函数调用的时候,参数类型是父类型,调用可以是子类型:

    void fun(base);//声明

    可以这样调用:fun(c1);

    返回值应该也是可以的,我没试,时间不够了,下次该改,请大家补充。

  • 相关阅读:
    java 多线程(synchronized)
    java 多线程(daemon)
    【转】 Nginx深入详解之多进程网络模型
    Linux 网络编程(epoll)
    Linux 网络编程(多路复用)
    Linux 网络编程(UDP)
    Linux 网络编程(TCP)
    STM32F0xx_看门狗(独立+窗口)配置详细过程
    STM32F0xx_FLASH编程(片内)配置详细过程
    STM32F0xx_RTC实时时钟配置详细过程
  • 原文地址:https://www.cnblogs.com/StormWendy/p/7704597.html
Copyright © 2020-2023  润新知