zoukankan      html  css  js  c++  java
  • 函数重载和覆盖(重写)的区别

    1、重载:函数重载是指在同一作用域内(名字空间),可以有一组具有相同函数名,不同参数列表的函数;

    2、覆盖(也叫重写):指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样;

    3、隐藏:指派生类中的函数把基类中相同名字的函数屏蔽掉了,隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就是在多态的实现上。

    下面那种情形下myfunc函数声明是重载?
    A. namespace IBM
    {
        int myfunc(int a);
    }
    namespace SUN
    {
        int myfunc(double b);
    }
    B. namespace IBM
    {
        int myfunc(int a);
    }
    namespace SUN
    {
        using IBM::myfunc;
        int myfunc(double b);
    }
    C. namespace IBM
    {
        int myfunc(int a);
        namespace SUN
        {
            int myfunc(double b);
        }
    }
    D. class A
    {
    public:
        int myfunc(int a);
    }
    class SubA: public A
    {
    public:
        int myfunc(double b);
    }

    答案是B,A和C都是名字空间不同;D是隐藏,只有B是重载!

    存在如下声明:
    void f (); //全局函数
    class A
    {
    public:
     void f(int);
    };
    
    class B: public A
    {
    public:
     void f(int *);
     static void f(int **);
     void test();
     //...
    };
    
    那么在如下B::test实现中哪几个函数调用是合法的:
    void B::test()
    {
     int x = 0;
     int *p = NULL;
     f();    //(1)
     f(x);   //(2)
     f(&x);  //(3)
     f(&p);  //(4)
    };
    A.(1)(2)(3)(4) B.(1)(3)(4) C.(2)(3)(4) D.(3)(4)

    答案是D,类成员函数重载:局部同名函数将隐藏而不是重载全局声明,不引入父类名字空间时子类的同名函数不会和父类的构成重载,静态成员函数可以和非静态成员函数构成重载

  • 相关阅读:
    [PHP] 自定义错误处理
    [PHP] url的pathinfo模式加载不同控制器的实现
    [PHP] 自动加载的实现
    [javaSE] java获取文件列表
    [PHP] PHP请求Socket接口测试
    [PHP] java读取PHP接口数据
    [PHP] 读取大文件并显示
    [javaSE] java上传图片给PHP
    HDUOJ----Eddy's research I
    HDUOJ--8球胜负
  • 原文地址:https://www.cnblogs.com/bonelee/p/5951699.html
Copyright © 2011-2022 走看看