При реализации чистой виртуальной функции на C++ существует ли руководство по лучшей практике, в котором говорится, что реализация также должна быть сделана виртуальной? В чем причина?Сделать виртуальные виртуальные виртуальные?
class Interface
{
public:
virtual void foobar() = 0;
};
class Concrete
: public Interface
{
public:
virtual void foobar();
};
Я не знал, что виртуальные функции всегда остаются виртуальными. Сегодня я кое-что узнал о C++. : D –
Не знал этого. Я думал, вы должны сказать, чтобы он оставался виртуальным. Как жаль, он может спасти компилятор от вызова виртуальной функции, если он знает, что у него есть объект «Concrete». –
Если вы вызываете foobar() с помощью указателя интерфейса, тогда компилятор вынужден совершать вызов виртуальной функции, поскольку он не имеет способа узнать фактический тип объекта. Однако, если вы вызываете foobar() непосредственно на объект Concrete, компилятор может генерировать прямой вызов функции, а не проходить через vtable. – Ferruccio