zoukankan      html  css  js  c++  java
  • C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

      学习C++必定会遇到重载、重写、重定义。概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了。

      

      概念,特点:

      

      重载:

        直白点说就是函数名字相同,传参的个数,类型不一样。判断标准在于传参是否相同。它有以下的特点:

        1.重载只发生在同一类中。

        2.子类不能重载父类的函数

        3.在程序编译期间,编译器将

      

      重写:

        1.发生在子类和父类之间

        2.子类虚继承(使用了virtual关键字)父类的同名函数,并且原型相同

      

      重定义:

        与重写唯一不同的在于没有使用virtual关键字  

      

      名称覆盖在后面的例程说明中进行解析。

      

      本次笔记通过以下两个类为例子说明:

      parent :                     child:

      void abc();                 void abc();

     virtual void func()              virtual void func(int i)
                             virtual void func(int i, int j)             
     1 class Parent
     2 {
     3 public: 
     4     void abc()
     5     {
     6         printf("abc");
     7     }
     8 
     9     virtual void func() 
    10     {
    11         cout<<"func() do..."<<endl;
    12     }
    13 
    14 };
    15 
    16 
    17 class Child : public Parent
    18 {
    19     
    20 public: 
    21     void abc()
    22     {
    23         printf("child abc");
    24     }
    25 
    26     virtual void func(int i)
    27     {
    28         cout<<"func(int i) do..."<<i<< " "<<j<<endl;
    29     }
    30     virtual void func(int i, int j, int k)
    31     {
    32         cout<<"func(int i, int j) do.."<< endl; 
    33     }
    34 
    35 };

        例程说明:

      父类定义了两个函数:abc 和 func 

      1.子类中的abc与父类abc有相同原型,没有使用virtual关键字,属于重定义

      2.假如父类中的函数abc 声明为    virtual void abc();   那么子类则是重写函数abc

     

      3.子类的func函数定义了两个传参不同的func函数,这两个函数属于重载

      

      4.名字覆盖

      在main函数中执行以下代码:

        Child c;

        c.func();

      4.1.将会提示:无法重载父类函数。编译失败。

      4.2.在继承中子类可以调用父类的公有函数,在这里因为在子类已经有了名字为func的函数(传参不同),那么编译器会认为这是子类在重载父类的函数,在上面的概念特点描述中第一点                 已经说明重载只发生在同一类中,所以重载失败

      4.3.不能直接调用父类函数是因为,子类有同名的函数,这就名字覆盖。

      4.4.这种情况下如果仍要调用父类的func函数可以通过作用域符号进行解决:

        c.Parent::func();

  • 相关阅读:
    groovy脚本语言基础1
    014.Ansible Playbook Role 及调试
    013.Ansible Playbook include
    012.Ansible高级特性
    011.Ansible条件语句
    010.Ansible_palybook 循环语句
    009.Ansible模板管理 Jinja2
    008.Ansible文件管理模块
    007.Ansible变量Fact,魔法变量和lookup生成变量
    006.Ansible自定义变量
  • 原文地址:https://www.cnblogs.com/MzMxMyg/p/9591594.html
Copyright © 2011-2022 走看看