zoukankan      html  css  js  c++  java
  • 【C/C++】高亮C++中函数的重写——函数名相同?参数列表相同?返回值相同?

        C++的重载给人留下了非常深刻的影响,原因是重载的条件很值得注意:函数名相同,参数列表不相同的两个函数构成重载函数,而无关乎二者的返回值。

        但是C++中的函数重写又是另一码事。标准规定:只要函数名相同,就会被重写。重写之后用子类访问“本该被继承的”父类的函数,将会调用子类的同名函数,而与父类中有什么样的同名函数无关(也就是当它不存在)。例如:

    #include <iostream>
    using namespace std;
    
    class A
    {
        public:
        int func()
        {
            return 1;
        }
    };
    
    class B: public A
    {
        public:
        char func(int a)
        {
            return '2';
        }
    };
    
    main()
    {
        B b;
        cout <<b.func()<<endl;
        cout <<b.func(1)<<endl;
    }

    上面这段代码中,main函数中的b.func(1)将成功被调用,而b.func()将报错:

    Untitled1.cpp|25|error: no matching function for call to 'B::func()'|

    因为此时从父类那里集成而来的int func()已然被重写,即使参数列表不同,即使返回值也不同。int func()在子类B中早已不复存在了。

  • 相关阅读:
    Djiango项目的创建以及配置介绍1
    最大矩形土地 单调栈或者DP
    0917 lxs 反思
    0915 反思
    codeforces 1209/C Paint the Digits 观察
    NOIP2014 解方程 秦九韶算法+多项式处理
    整数拆分问题
    机器人M号
    有趣的数列 唯一分解定理+卡特兰数
    数位DP 不要62
  • 原文地址:https://www.cnblogs.com/zhchngzng/p/4456918.html
Copyright © 2011-2022 走看看