Рубрики

Скрытие всех перегруженных методов с одинаковыми именами в базовом классе

В C ++, если производный класс переопределяет метод члена базового класса, тогда все методы базового класса с тем же именем становятся скрытыми в производном классе.
Например, следующая программа не компилируется. В следующей программе Derived переопределяет метод fun () Base, и это делает fun (int i) скрытым.

#include<iostream>

  

using namespace std;

  

class Base

{

public:

    int fun()

    {

        cout<<"Base::fun() called";

    }

    int fun(int i)

    {

        cout<<"Base::fun(int i) called";

    }

};

  

class Derived: public Base

{

public:

    int fun() 

    {

        cout<<"Derived::fun() called";

    }

};

  

int main()

{

    Derived d;

    d.fun(5);  // Ошибка компилятора

    return 0;

}

Даже если сигнатура метода производного класса отличается, все перегруженные методы в базовом классе становятся скрытыми. Например, в следующей программе Derived :: fun (char) скрывает как Base :: fun (), так и Base :: fun (int).

#include<iostream>

  

using namespace std;

  

class Base

{

public:

    int fun()

    {

        cout<<"Base::fun() called";

    }

    int fun(int i)

    {

        cout<<"Base::fun(int i) called";

    }

};

  

class Derived: public Base

{

public:

    int fun(char c)  // Делает Base :: fun () и Base :: fun (int) скрытыми

    {

        cout<<"Derived::fun(char c) called";

    }

};

  

int main()

{

    Derived d;

    d.fun();  // Ошибка компилятора

    return 0;

}

Обратите внимание, что приведенные выше факты верны как для статических, так и для нестатических методов.

Рекомендуемые посты:

Скрытие всех перегруженных методов с одинаковыми именами в базовом классе

0.00 (0%) 0 votes