zoukankan      html  css  js  c++  java
  • 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);

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

  • 相关阅读:
    ADO.NET朝花夕拾(二)
    使文本框自动适应内容的高度
    jQuery getJSON
    ASP.NET页面生命周期概述
    CSS学习(四)CSS选择符详解
    jQuery dialog 异步调用ashx,webservice数据
    jQuery之小议each()
    jQuery,Ashx发送站内信
    Newtonsoft.Json处理日期问题
    CSS学习(三)带当前标识的横向导航图片美化版
  • 原文地址:https://www.cnblogs.com/StormWendy/p/7704597.html
Copyright © 2011-2022 走看看