3 ms·
>Go refactor the signature 2 or 3 virtual functions with let us say a couple parameters each in two classes and 4 or 5 derived classes, one two levels deep (thi
by rramadass 4y ago
>Go refactor the signature 2 or 3 virtual functions with let us say a couple parameters each in two classes and 4 or 5 derived classes, one two levels deep (this is real code what I am talking about) and do it with and without override.
This is just trivial and does not really support your arguments.
The way it was done before was to use the "virtual" prefix keyword for virtual functions across the entire class hierarchy. Merely a discipline which was enforced religiously via coding guidelines; it gave the programmer the needed cue while the compiler doesn't care. You then did a Search and Replace as needed.
- germandiago 4y agoHow can you claim you do C++ and not evwn know that virtual did NOT check if it was an override of what you wanted or you were introducing an entirely new function? Your understanding of C++ is quite poor. You have a wrong mental model even about how virtual functions worked. There was no way for the compiler to say you were overriding or not hence now way to emit an error!!No religions here, just objectively better features. I bet you did not refactor hierarchies pre and post-C++11 otherwise you would not say that. It is not that trivial and marking overrides catches all intents of fake overrides. Before that was not possible. Seems suspicious to me that you claim to have used C++ for long. You do not understand even how virtual functions worked in the language.
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- rramadass 4y agoYou are making inflammatory statements without understanding what has been written; it is not appreciated; I said; >to use the "virtual" prefix keyword for virtual functions across the entire class hierarchy. What is meant is that the entire signature of the virtual function including the "virtual" keyword is reproduced in all derived classes thus ensuring that no mistakes are made. I also said; >it gave the programmer the needed cue while the compiler doesn't care It was just good programming discipline rather than depending on compiler crutches. Just to drive it home; here is an example: https://stackoverflow.com/questions/4895294/c-virtual-keywor https://stackoverflow.com/questions/4895294/c-virtual-keywor...
- germandiago 4y ago> The way it was done before was to use the "virtual" prefix keyword for virtual functions across the entire class hierarchy. Merely a discipline which was enforced religiously via coding guidelines No, that did not enforce safety or solved the refactoring problem I told you. It seems you do not want to listen that override fullfills the case where you assert that you are overriding (and it will be a compile error). You have a misunderstanding and a wrong mental model for how virtual worked. It did not enforce anything, just declared a virtual function, no matter it was new or an override. virtual can introduce a new virtual function by accident. Example: class MyClass { public: virtual void f(int) {} }; class MyDerived : public MyClass { public: virtual void f(int) {} }; Refactor: class MyClass { public: // NOTE: signature changed to double virtual void f(double) = 0; }; class MyDerived : public MyClass { public: // FORGOT TO REFACTOR!!! STILL COMPILES!!! virtual void f(int) {} //void f(int) override {} // COMPILE TIME ERROR! }; > You are making inflammatory statements without understanding what has been written; it is not appreciated No, I was not. I was just showing you do not know how the mechanism works with facts. Above you have an example of why what you say does not work. I would recommend to talk more concretely and not to make too broad statements about tools you seem to not know in detail but it is up to you, I would not stop you. Just a friendly recommendation ;)
- rramadass 4y agoHave you really not understood what was written or are you just arguing for the sake of it? I cannot be spelling out every step of trivialities. btw - Anybody who has been following this chain of responses can see who is the one using inflammatory language to hide their lack of comprehension and knowledge. For the last time; 1) We did not depend on compiler crutches to help us. 2) We enforced coding discipline religiously so that all virtual functions are unambiguously identified with full signatures across the entire class hierarchy. 3) When you need to refactor you did simple search/replace on the full signature using grep/ctags/cscope/whatever across the entire codebase. That is all there is to it. This might be the most valueless discussion i have had on HN and that too over a utter triviality...sigh.