I just wanted to clear out that using the virtual keyword allows the usage of the override keyword but that doesn’t mean that you cannot override a public or protected function from a derived class, you still can (by not adding override to the declaration of the method) but depending on the situation you may need to use virtual because you can come across something like this (I made a small example).
Another thing about override that I found a bit confusing and maybe you can explain this to me, why is it that I can override a virtual method that is public and declare it private on the header of the derived class?, it just doesn’t make sense since it will always execute (maybe that’s the reason the compiler doesn’t complain, it doesn’t matter right?).