I understand we can't create objects of abstract class but how is the function "void prs( subt& i )" working. "subt& i" is passing by reference. But still we are passing by reference of an object of "subt" type which is an abstract class.
Cannot see any contradiction. The objects is already created to the moment of referencing it. And passing by reference never implies creation of any sort.