В последнее время мне задали этот самый простой вопрос.Необходимость в виртуальных функциях
Зачем нам нужны виртуальные функции или полиморфизм в этом отношении?
Я дал различные ответы от проектов реального времени, объясняющих, как это работает, но не смог ответить на самый простой вопрос, относящийся к необходимости. Мой вопрос (или его QNS был)
Я в любом случае собираюсь сделать ниже, чтобы вызвать соответствующие функции:
<base class> b = new <derived class>;
b.foo();
//can also be implemented as
<derived class> d = new <derived class>();
d.foo();
Эта выше не выполняется решение времени, как я знаю, что во время написания моего код, который я собираюсь поместить в базу тип производного объекта. Вышеизложенное также может быть реализовано непосредственно, как показано выше. Так почему же виртуальный?
Но вы не можете использовать какие-либо производные свойства, используя базовый указатель cute, который не наследуется. – Subhajit
@Subhajit В принципе, точка. Цель базового класса - предоставить общий набор методов, которые могут быть и будут унаследованы и переопределены производными классами. Вы получаете доступ к 'cat' или' dog' через указатель «animal», потому что таким образом мы можем безопасно называть методы «animal», и поведение по-прежнему будет определяться производным классом. Однако доступ к производным частям потребует отбросов и в основном ужасных вещей, которые лучше всего оставить, если вы очень уверены в том, что делаете. –
@Subhajit Что-то действительно должно приносить и жертвовать, если мы используем гибкость полиморфизма. Потеря информации о типе, часто использование динамического распределения и другие недостатки, и это наша работа в качестве программистов, чтобы взвесить плюсы и минусы какой-либо техники, если мы будем использовать их. –