Требуется разъяснение по виртуальным функциям и закрытым членам класса

В С++, если общедоступная виртуальная функция базового класса имеет ссылку на поле частного члена, а производный класс не переопределяет этот метод, тогда эта ссылка будет указывать на частный член производного класса.


person user1447725    schedule 04.09.2012    source источник
comment
Пример кода будет полезен. Как виртуальная функция имеет ссылку?   -  person Yakov Galka    schedule 04.09.2012


Ответы (2)


Метод базового класса по-прежнему будет воздействовать на член базового класса, даже если вы добавите член с тем же именем в свой производный класс (на что, я думаю, вы и хотели обратить внимание).

person Nbr44    schedule 04.09.2012
comment
Спасибо, есть ли какая-нибудь техника для достижения того, что я хочу здесь? - person user1447725; 04.09.2012
comment
Вы можете добавить виртуальную функцию, чтобы получить ссылку на нужные данные и переопределить ее в производном классе. Однако это не кажется очень элегантным, чего вы на самом деле пытаетесь достичь, делая это? - person jcoder; 04.09.2012
comment
на самом деле я пытаюсь повторно использовать код (устаревший и его изменения, которых следует избегать) в моем новом классе, который изменяет только несколько методов существующего - person user1447725; 04.09.2012

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

person pmr    schedule 04.09.2012
comment
Спасибо, есть ли какая-нибудь техника для достижения того, что я хочу здесь? - person user1447725; 04.09.2012
comment
@ user1447725 Сделать функцию защищенной и виртуальной? - person pmr; 04.09.2012