Making a method protected or private has the side effect that it can no longer be called be a non derived pointer outside the class. That's not the intent of final/sealed.
And again, C++ is not intended to prevent a programmer from shooting themselves in the foot, it is intended to allow maximum flexibility. There is no point in restricting the use of derived methods if the programmer wishes to do so. If you need to restrict inheritance then simply make the method private or protected and it can no longer be inherited. You can do this in C# as well, so adding final was pointless.