Можно ли передавать производные классы по ссылке на функцию, принимающую базовый класс в качестве параметра

Допустим, у нас есть абстрактный базовый класс IBase с чистыми виртуальными методами (интерфейс).

Затем мы выводим CFoo , CFoo2 из базового класса.

И у нас есть функция, которая знает, как работать с IBase.

Foo(IBase *input);

Обычный сценарий в этих случаях выглядит следующим образом:

IBase *ptr = static_cast<IBase*>(new CFoo("abc"));
Foo(ptr);
delete ptr;

Но управления указателями лучше избегать, поэтому есть ли способ использовать ссылки в таком сценарии?

CFoo inst("abc");
Foo(inst);

где Foo is:

Foo(IBase &input);
34
задан Coder 14 February 2012 в 23:13
поделиться