Скрытие функции в c ++ - PullRequest
2 голосов
/ 09 мая 2020

Я пробовал несколько концепций сокрытия функций в C ++. Итак, здесь, в производном классе, я использовал оператор разрешения области видимости using base::fun, чтобы предоставить область видимости базового класса в производном классе. Моя цель - напечатать cout<<" base "<< x;, но вывод выводит только производный класс cout. Есть причины, почему и как решить? т.е. он должен печатать значение как базового, так и производного класса. Я новичок в C ++, прошу прощения за ошибки. Код показан ниже:

#include <stdio.h>
#include <iostream>
using namespace std;

class base
{
public:
int fun(int x)
{
    cout<<" base "<< x;
    return x;
}
};
class derived:public base
{
public:
using base::fun;
void fun(int a)
{
    cout<<" derived "<< a;
}
};

int main()
{
    derived d;
    d.fun(10);
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

он должен печатать значение как базового, так и производного класса

Нет. Будет выбрана и вызвана только одна функция. Тогда проблема в том, какой выбрать. В этом случае выбирается derived::fun; потому что для с использованием объявления ,

Если в производном классе уже есть член с таким же именем, списком параметров и квалификациями, член производного класса скрывается или переопределяет (не конфликтует с) членом, представленным из базового класса.

Вы можете вызвать базовый класс, явно указав:

d.base::fun(10);

LIVE

2 голосов
/ 09 мая 2020

он должен выводить значение как базового, так и производного класса

Как вы думаете, почему? Существует один вызов функции, поэтому теоретически он должен быть либо derived::fun, либо base::fun, но не обоими. Поскольку d имеет тип derived, вызывается derived::fun.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...