Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
1

Почему вызывается перегрузка виртуальной функции из приватной секции дочернего класса?

08.02.2016, 10:18. Просмотров 520. Ответов 3
Метки нет (Все метки)

Как вообще такое происходит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
    public:
    virtual void foo(){std::cout<<"A\n";    }
};
class B:public A
{
    private:
        void foo(){std::cout<<"B\n";    }
};
int main(int argc, char** argv) {
    A*ob=new B;
    ob->foo();
    return 0;
}
в том смысле что вызов из private?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2016, 10:18
Ответы с готовыми решениями:

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и...

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и...

Как полю класса А обратится к приватной функции класса А?
Есть лифт (класс &quot;Elevator &quot;), в котором находится кнопка (класс &quot;Button&quot;). При нажатии на кнопку...

Перегрузка оператора >> для дочернего класса от базового виртуального класса
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием должного времени на...

3
ForEveR
В астрале
Эксперт С++
8014 / 4771 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
08.02.2016, 10:26 2
anti-k, Потому что проверка на доступ производится до virtual dispatch. Функция foo в паблик секции класса А, значит все ок.
1
DrOffset
11862 / 6416 / 1546
Регистрация: 30.01.2014
Сообщений: 10,438
08.02.2016, 10:26 3
Цитата Сообщение от anti-k Посмотреть сообщение
в том смысле что вызов из private?
private\public\protected - это статический механизм (времени компиляции).
механизм виртуальных функций - динамический (времени исполнения).

На этапе компиляции с точки зрения видимости функции - все нормально. Вызываем же через указатель на базу, а там функция открыта. А уже во время исполнения будет в соответствии с таблицей виртуальных функций вызвана версия из наследника.
2
anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
08.02.2016, 10:30  [ТС] 4
чудеса
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2016, 10:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Наследование: почему вызывается метод базового класса, а не производного?
Всем привет, такой вопрос, почему вызывается в данном коде метод базового класса, а не производного...

Полиморфизм: Почему в объекте нет свойства дочернего класса
class A { public int a = 1; public int c = 5; virtual public void...

Почему не могу получить доступ к protected полям из дочернего класса?
Пытаюсь получить доступ к ships из дочернего класса Referee, но не получается. В чем ошибка? ...

Почему при восходящем приведении типов вызывается метод класса потомка?
class T1 { public virtual void P() { Console.WriteLine(1); } } class T2 : T1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.