4 ms·
A better question is: Why do we need to put the archaic virtual keyword in front of a method? Shouldn't non-virtual functions used in an inheritence way be decl
by d0m 17y ago
A better question is: Why do we need to put the archaic virtual keyword in front of a method? Shouldn't non-virtual functions used in an inheritence way be declared as private while the other being automatically virtual ?
Then if he agrees, he's ok. If he gives you more examples of why C++ is archaic, he's great. If he begins talking about non-virtual methods being more optimized than virtual one, thanks him for his time and try to find someone else.
- killedbydeath 17y agoPublic non-virtual functions may be useful. For example, to provide alternative API functions. Something like: virtual public setOrigin(const Point &p); public setOrigin(float x, float y) { setOrigin(Point(x,y)); } Someone inheriting from this class will know that all the customization is in one function.
- d0m 17y agoStill, I find it more logical to say virtual by default and using another keyword for rare case when you want to specify a non-virtual function.
- alnayyir 17y agoSure, if you learned to code in dynamic langs like Python and Ruby. I didn't, I learned in C. I'd rather take the safe route and non-virtual by default.
- haberman 17y ago> If he begins talking about non-virtual methods being more optimized than virtual one, thanks him for his time and try to find someone else. What's your problem with this answer? Non-virtual methods can be easily inlined, whereas virtual methods (almost always) require: 1. a load (though a hoistable one) from the vtable 2. an indirect branch 3. register re-allocation 4. function call overhead (standard prologue/epilogue)
- VBprogrammer 17y agoThat is only a problem if and only if that method is being called in a very tight loop and its body is not particularly time consuming. A person making optimisations like this without first timing the code or at the very least spending some time introspecting on the pros and cons of doing so would not be someone I wanted to work with!
- pmjordan 17y agoTell that to someone writing a PlayStation 2 game. Using virtual functions without thinking will kill performance on that machine.
- sorbits 17y agoWhat if he makes a case for keeping types as POD when possible? :) Anyway, it is clear from your comment that you dislike C++ and you prefer to hire people who agree with you that C++ is archaic, that is fine and all, but it doesn’t show in-depth understanding of the language. Explaining why things are as they are does show deep understanding of the language and a desire to learn the dirty details, IMHO a valuable trait.
- d0m 17y agoIt's a way to avoid a 100% only (and closed mind) C++ programmer. Understanding the cost of a virtual function is something. Not understanding that in most situation this cost is trivial, is something else. And every C++ great programmer should know that C++ is archaic and that higher level languages exist. If someone only knows C++, he is a C++ programmer, not a programmer.
- tspiteri 17y agoVirtual functions are helpful only when you have derivation and need some common interface. When your class is not meant to be derived from, declaring functions as virtual is just plain misleading. And I am strongly against fitting everything artificially into a class hierarchy, that is, I dislike using the OOP sledgehammer for every simple class. Also, great C++ programmers are those who use C++ in a problem domain matched to it, not those who use C++ where Perl or Python or something else is so much better. So they know that C++ is not archaic at all, it is just not suitable for every job, but then, what language is?
- huherto 17y agoIMO, you shouldn't dismiss a candidate as close minded with one question. If you have fears that he only knows C++ and doesn't care about higher level languages, you should digg into that with other questions.
- pmjordan 17y agoC++ is used in places other than bleeding edge PCs, you know. The impact of a virtual function call is non-trivial on some systems, the most prominent one that springs to mind is the PlayStation 2. Knowing how they work and when to use them is always a good thing. With that sort of attitude you'll only hire people less competent than yourself; you're trying to find more competent people.
- d0m 17y agoThanks for saying I'm not competent. First, I know what a virtual function is and how performance might be important. However, it's just illogical to use inheritences and OO without using virtual function. Just think about the virtual destructor.. why isn't it automatically virtual? I find the inverse more interesting: Virtual by default and declaring non-virtual when the rare need arrives.
- pmjordan 17y agoThanks for saying I'm not competent. This isn't what I said, but you know that anyway. Just think about the virtual destructor.. why isn't it automatically virtual? Basically, because not every class is used polymorphically, many are designed to be used primarily on the stack or as members. The merits of what should be the default are debatable, but as with anything in C++, the reason is probably historical. For example, it would break all C code that used structs. One of the C++ design principles is to not impose features upon you that you don't need, so that might be why they decided not to e.g. make classes have virtual functions by default, but not structs, a bit like classes have private members and bases by default. In any case, these are straw man arguments. The point I was trying to make is that you suggested turning down people because they know the low-level details of the platform and their implications. I counter that this is a phenomenally bad idea; knowing what lies beneath the abstraction is always a good idea, especially if that reveals dragons. You haven't said anything to counter that, instead pointing out aspects of C++ you don't like. If you dislike C++ enough not to use it, why are you interviewing people for C++ programming positions anyway?
- 17y ago
- tbrownaw 17y agoWhy C# also makes methods non-virtual by default: http://www.artima.com/intv/nonvirtual.html http://www.artima.com/intv/nonvirtual.html Other (shorter) commentary: http://stackoverflow.com/questions/814934/why-c-implements-methods-as-non-virtual-by-default http://stackoverflow.com/questions/814934/why-c-implements-m...
- scott_s 17y agoOne of the main design principles behind C++ was "you don't pay for what you don't use." Hence, if you don't want to use polymorhpic member functions, then you don't pay for the overhead.