I know that virtual functions have an overhead of dereferencing to call a method. But I guess with modern architectural speed it is almost negligible. 

1. Is there any particular reason why all functions in C++ are not virtual as in Java?
2. From my knowledge, defining a function virtual in a base class is sufficient/necessary. Now when I write a parent class, I might not know which methods would get over-ridden. So does that mean that while writing a child class someone would have to edit the parent class. This sounds like inconvenient and sometimes not possible?

**Update:**  

Summarizing from Jon Skeet's answer below: 

It's a trade-off between explicitly making someone realize that they are inheriting functionality [which has potential risks in themselves [(check Jon's response)] [and potential small performance gains] **with a trade-off** for less flexibility, more code changes, and a steeper learning curve.

**Other reasons from different answers:** 

Virtual functions cannot be in-lined because inlining have to happen at runtime. This have performance impacts when you expect you functions benefits from inlining.

There might be potentially other reasons, and I would love to know and summarize them.