When you mark a method of your class as virtual you give the user of your class the possibility to override that method. If you don't, the metod can't be overridden.
That statement is inaccurate on so many levels that I'm speechless. Non-virtual functions can also be overridden, but the behaviour differs from overridden virtual functions due to "name hiding", as described in the C++ standard.
The point of virtual member functions is that they allow functionality to be specified in a base class, and specialised in a derived class. For example, a generic Shape class might declare a virtual function named Area() to compute it's area, and another virtual function called Name(). Derived classes (which represent particular shapes) override those virtual function to give appropriate results for particular shapes.
This function can be passed any Shape object by reference, and will print out information about the actual shape passed.
This is described as polymorphic behaviour: the class Shape is a polymorphic base class, derived classes modify it's behaviour, but the interface seen by the PrintArea() function is the same for all the classes. The PrintArea() function only receives generic information about a Shape (i.e. it provides a Name() and Area() member function) but, at run time, the behaviours correspond to the actual type of the object passed.
Triangle tri(2.0, 4.0);
PrintArea(tri); // will print "Triangle - Area = 4"
PrintArea(cir); // will print "Circle - Area = 78.5" (possibly higher precision value)
s = ○
s = &tri;
// this loop will print out the above lines of output in reverse order
for (int i = 0; i < 2; ++i)