5 ms·
I don't think C++ comes with the OOP mindset. At least, not recently. Most people will tell you it's "multi-paradigm." And I would say C++ certainly gives you e
by thestoicattack 8y ago
I don't think C++ comes with the OOP mindset. At least, not recently. Most people will tell you it's "multi-paradigm." And I would say C++ certainly gives you enough flexibility to dig underneath the abstractions, as TFA shows.
- MichaelMoser123 8y agoI am not so sure about the multi-paradigm thing: In c++ everything is a class. Also of you try hard enough then you may implement any paradigm in any language.
- thestoicattack 8y agoThat's Java, isn't it? I write lots of C++ without classes.
- mindcrime 8y agoEven though Java is still very "class-centric", in the strictest sense Java doesn't make "everything a class". There have always been primitives for things like int, long, boolean, float, double, etc. And now that we have MethodHandles and what-not, you can (sort of) start to think of functions as first class entities in Java. And there are Lambdas as well which effectively let you build a function without it needing a class to contain it.
- thestoicattack 8y agoI was being a little flippant and unfair to Java because I was trying to find where the claim "everything is a class" had appeared from.
- lultimouomo 8y agoYou mean except booleans, integers, floats, pointers, free functions, namespaces, templates and lambdas?
- gpderetta 8y agoAlso a class in C++ is by default exactly the same as a struct (except for default access control which is a minor thing). An OOP style class would be any class type (including struct) with virtual functions which you would have to opt in.
- asveikau 8y agoI agree with your sentiment but the lambdas do get treated as anonymous classes overloading operator ().
- kllrnohj 8y agoNot really true. Lambdas can be converted to a class overloading operator() (such as std::function), but they are not inherently that. You can use them as just function pointers, too. Example: #include <cstdio> void call_func(void(*func)()) { func(); } int main(int argc, char* argv[]) { // Lambda can be converted to a function pointer call_func([]() { printf("hello as a function pointer\n"); }); }
- asveikau 8y ago> but they are not inherently that. I am fairly certain I have had error messages and disassemblies that suggest otherwise. This may however be an implementation detail. > You can use them as just function pointers, too. Yes, I know this. It only works when there are no captures. And AFAIK once there are captures you start getting object code that looks a lot like you put those captures into an anonymous class. (When not inlined.)
- slavik81 8y agoYou can get that sort of behaviour from any class by implementing the conversion operator. I assume that lambda implements `operator(void(*)())` so it is implicitly convertible to a function pointer.
- MichaelMoser123 8y agoyes, you can do a C++ program with functions only + integers and array of integers. technically that's C++. Very apt observation! I still guess that the main entities in your c++ program will be classes (not POD) And I still maintain that most people treat class libraries (such as STL) as given and do not inspect how they are implemented and do not consider what constraints / alternatives do exist. One example: the std::dequeue is a dynamic array, and you can't quite tune the size of the inner array easily by means of template or instance parameters - no one cares. Also many people happily use the shared_ptr class and don't even know that it takes very expensive atomic operations to do the reference counting; I would have expected a template parameter that could determine if shared_ptr is meant for multithreaded use or not. Most people don't care and happily use the shared_ptr. Also there are no intrusive linked lists in STL (well, there are in boost) I can go on and on about the STL (and other widely used libraries if you care) and I still suspect that they get away with these "issues" in a widely used library because people are used not to question library implementations and treat them as frigging black boxes.
- pjmlp 8y agoBetter learn C++ before criticising it.
- Sharlin 8y agoThe "STL" part (data structures and algorithms) part of the C++ standard library uses no OO design at all. The iostreams part does, but it's hardly visible to the user. (No, simply having syntax that allows you to write `data.function()` instead of `function(data)` doesn't make anything object-oriented.)