On Monday, 2 December 2013 at 11:14:58 UTC, Namespace wrote:
final by default is far more efficient than virtual by default. So final by default is preferable.

The *whole point* of classes is to have virtual functions. If you don't want them, don't write class methods! Use structs or UFCS instead.

Perhaps a counter argument is that the whole point of *interfaces* is virtual functions, and classes just implement them and thus ought to be final, if you want virtual stuff go through the interface.

But, regardless, I think the real problem here isn't virtual by default. The real problem is there's things written as class methods that really shouldn't me methods at all. The ideal "method" is actually a UFCS function that operates on the interface, without touching any private state at all. Next best is a UFCS function that works on the class and needs private state.

The only time it, at least ideally speaking, should be in the class itself is if it has something to do with implementing interfaces. And that means virtual generally makes sense.

Reply via email to