重载

  1. 相同的范围(在同一个类中)
  2. 函数名相同
  3. 参数不同
  4. virtual关键字可有可无

重载与继承、隐藏很好区分,因为重载函数在同一个类中

举例说明

#include <iostream>
using namespace std;
class Base
{
    public:
        void f(int x) {cout << "Base f(int)" << x << endl;}
        void f(float x) {cout << "Base f(float)" << x << endl;}
};

int main()
{
    Base b;
    b.f(42);
    b.f(3.14f);
}

结果

 类成员函数的重载 继承 隐藏

继承

  1. 不同的范围(分别位于基类和派生类)
  2. 函数名相同
  3. 参数相同
  4. 基类必须有virtual关键字

隐藏

  • 如果派生类的函数与基类的函数同名、同参数,基类函数不带有virtual关键字
  • 如果派生类函数与基类的函数同名、不同惨,不管基类函数带不带virtual关键字

归纳起来

   同名前提(不同名免谈)

  • 同参+virtual——继承
  • 同参+无virtual  / 不同参 —— 隐藏

强调:只要不是继承(virtural+同参)就是隐藏,隐藏后,如果基类、派生类有相同函数名,派生类对象只能调用派生类的函数。

#include <iostream>
#include <string>
using namespace std;

class base
{
    public:
        virtual void test(int a, int b) { cout << a << " " << b << endl; }
};
class derived : public base
{
    public:
        void test(int a) { cout << a << endl; } //隐藏
};

int main()
{
    derived m;
    m.test(45);
    m.test(4, 5);  //error:派生类中没有俩参数的
}
View Code

相关文章: