zoukankan      html  css  js  c++  java
  • c++之——重载、重写、重定义

    函数重载:

    必须在同一个类中进行;

    子类无法重载父类的函数,父类同名函数将被子类名称覆盖;

    重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。

    函数重写与重定义:

    重写:

    必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型;

    使用virtual关键字声明之后能够产生多态(如果不使用virtual,那叫重定义);

    多态是在运行期间根据具体对象的类型决定函数调用(动态联编)。

    代码分析:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Parent {
     5 public:
     6     virtual void fuc()
     7     {
     8         cout << "parent 无参fuc...
    ";
     9     }
    10     virtual void fuc(int i)
    11     {
    12         cout << "parent 1参fuc...
    ";
    13     }
    14     virtual void fuc(int i,int j)
    15     {
    16         cout << "parent 2参fuc...
    ";
    17     }
    18 
    19 };
    20 class Child1 :  public Parent
    21 {
    22 public:
    23     virtual void fuc(int i, int j)
    24     {
    25         cout << "child 2参fuc...
    ";
    26     }
    27     virtual void fuc(int i, int j,int k)
    28     {
    29         cout << "child 3参fuc...
    ";
    30     }
    31 };
    32 
    33 
    34 int main()
    35 {
    36     Child1 c1;
    37     c1.fuc();
    38     return 0;
    39 }

    报错如下:

     前面已经说过,子类无法重载父类函数,并且,子类同名函数会覆盖父类函数,所以,子类c1访问fuc函数,是没有参数的,编译器在child1中找到了fuc函数的名字,就不会去父类再找了,而child1类中没有提供无参数的fuc函数重载,所以报错,要想访问父类的无参fuc函数,可以加域作用符:

    c1.Parent::fuc();
  • 相关阅读:
    mysql远程执行sql脚本
    数据库死锁
    sqlserver 数据库之调优
    sqlserver 数据库之性能优化
    Session共享的解决办法
    关于对session机制的理解--通俗易懂
    kafka之常用命令
    分布式消息队列之kafka
    vuejs调试代码
    json
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6534779.html
Copyright © 2011-2022 走看看