1. 首页
    2. C++

    重载、覆盖、隐藏、多态

      1. 重载
        1. 在同一个作用域内
        2. 函数名相同
        3. 参数不同,可以是数量或类型
        4. 其他因素:
          1.  virtual、static不影响重载
          2. 返回值类型不同不影响重载
          3. 部分函数类型限定符,如写在成员函数参数列表后的const,影响重载
        5. 示例:
            • 
              class A {
              public:
              	void f(int) {}
              	void f(float) {}
              	void f(int) const {}
              	void f(int, int) {}
              	//int f(int){}
              	//virtual void f(int) {}
              };
              
      2. 覆盖
        1. 不在同一作用域,即分别位于子类和父类中
        2. 函数名相同
        3. 参数相同,返回值相同
        4. 父类中函数前必须有virtual关键字
        5. 示例
          • class A {
            public:
            	virtual void f(int) {}
            };
            class B : public A {
            public:
                    void f(int) {}
            };
      3. 隐藏
        1. 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆).
        2. 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏.
        3. 示例
          • class A {
            public:
            	virtual void f(int) {}
            	void g(int){}
            };
            class B : public A {
            public:
            	void f(float) {}
            	void g(int){}
            };
            
      4. 多态
        1. 多态是面向对象模型的重要思想,是指
        2. 多态既可以作用于成员函数多态也可以作用于成员变量,b
        3. 多态可分为“动态多态”:就是常见多态,还有“静态多态”
        4. 动态多态的主要实现方式是覆盖,使用显式接口,虚函数
        5. 静态多态体现在重载和模板编程,对于相关的对象类型,直接实现它们各自的定义,不需要共有基类,甚至可以没有任何关系。只需要各个具体类的实现中要求相同的接口声明,这里的接口称之为隐式接口。客户端把操作这些对象的函数定义为模板,当需要操作什么类型的对象时,直接对模板指定该类型实参即可(或通过实参演绎获得)。相对于面向对象编程中,以显式接口和运行期多态(虚函数)实现动态多态,在模板编程及泛型编程中,是以隐式接口和编译器多态来实现静态多态。
        6. 静态多态示例:
          • class A {
            public:
            	void f(){}
            };
            class B{
            public:
            	void f(){}
            };
            template
            void fun(T t) {
            	t.f();
            }
            int main(int argc, char** argv) {
            	A a;
            	B b;
            	fun(a);
            	fun(b);
            	system("pause");
            	return 0;
            };
            
    评分 0, 满分 5 星
    0
    0
    看完收藏一下,下次也能找得到
    • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
    • 文章链接:https://icebmji.com/blog/?p=297 [复制] (转载时请注明本文出处及文章链接)
    上一篇:
    :下一篇

    发表评论

    gravatar

    此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

    沙发空缺中,还不快抢~