zoukankan      html  css  js  c++  java
  • 多态性

    一:什么是多态?

       简单来说多态是“一个接口,多种方法”。(不同对象收到相同的消息时,产生不同的动作)。

    从实现角度来讲,多态可以划分为两类:编译时的多态(通过静态连编实现,主要通过函数重载和运算符重载实现)和运行时的多态(通过动态连编实现,主要通过虚函数实现)。

    二:重载和覆盖有什么不同?

    虚函数总是在派生类中被改写,这种改写被称为“Override”(覆盖)。它是指派生类重写基类的虚函数,重写的函数必须有一致的参数表和返回值。

    Overload被称为“重载”,是指编写一个与已有函数同名但是参数表不同的函数。函数重载是编译时的多态。

    #include<iostream>
    using namespace std;
    class Base{
    public:
        virtual void f1();
        virtual void f2();
        virtual void f3();
        void f4();
    };
    class Derived:public Base{
    public:
        virtual void f1();//虚函数,可以不写virtual
        void f2(int x);//失去虚函数的特性,编程普通的重载函数
        //char f3();//返回值不一样,编译出错
        void f4();//普通的重载函数
    };
    void Base::f1()
    {
        cout<<"base1
    ";
    }
    void Base::f2()
    {
        cout<<"base2
    ";
    }
    void Base::f3()
    {
        cout<<"base3
    ";
    }
    void Base::f4()
    {
        cout<<"base4
    ";
    }
    void Derived::f1()
    {
        cout<<"Derived1
    ";
    }
    void Derived::f2(int x)
    {
        cout<<"Derived2
    ";
    }
    void Derived::f4()
    {
        cout<<"Derived4
    ";
    }
    int main()
    {
        Base b,*p;
        Derived d;
        p=&d;
        p->f1();
        p->f2();
        p->f4();
        return 0;
    }

    结果:

    三:纯虚函数和抽象类

     1)纯虚函数:

    有时,基类往往便是一种抽象的概念,它并不与具体的事物相联系。 这时在基类中将某一成员函数定义为虚函数,并不是基类本身的需要,而是考虑到派生类的需要,在基类中预留了一个函数名。例如:一个表示封闭图形的基类A,在基类A中求面积是无意义的,因为不知道它是什么封闭图形,但是可以将求面积的函数定义为虚函数,各派生类根据所表示的图形的不同重写这个虚函数。由此引出纯虚函数,即在基类中不给出函数实现的虚函数

    纯虚函数是在声明虚函数时被初始化为“0”的函数。声明纯虚函数的一般形式如下:

    virtual 函数类型 函数名(参数表)=0;  它后面的0并不表示函数的返回值为0,只是告诉编译系统“这是纯虚函数”,没有函数的功能,不能被调用。

    1)抽象类:

    如果一个类中至少有一个纯虚函数,那么就称该类为抽象类。

    特点:

     1.抽象类中至少包含一个没有定义功能的纯虚函数。

     2.不允许从具体类派生出抽象类

     3.抽象类不能用作函数的参数类型,函数的返回类型和显示转换的类型。

     4.可以声明指向抽象类的指针或引用,此指针可以指向它的派生类,进而实现多态性。

     4.如果派生类重没有定义虚函数的额实现,而派生类知识继承基类的纯虚函数,则这个派生类仍然是一个抽象类。

    作者:wj704    出处:http://www.cnblogs.com/wj204/   
  • 相关阅读:
    MIP技术进展月报第3期:MIP小姐姐听说,你想改改MIP官网?
    MIP技术进展月报第2期: 数据绑定,异步脚本加速
    WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享
    改造MIP获得搜索青睐,轻松完成SEO
    MIP 技术进展月报:储存功能全新上线,MIP-Cache域名升级,校验更严谨
    【转】W3C中国与百度联合组织移动网页加速技术研讨会
    百度将与W3C中国召开MIP技术研讨会
    【公告】MIP组件审核平台故障-影响说明
    【公告】关于8.8MIP组件审核平台故障的说明
    MIP 移动网页加速器视频教程全新发布
  • 原文地址:https://www.cnblogs.com/wj204/p/3349967.html
Copyright © 2011-2022 走看看