...
Code Block | ||||
---|---|---|---|---|
| ||||
// File1.h class B { protected: double d; public: B() : d(1.0) {} }; -- contents identical. // File2.h void g(class B *); // Accepts a B object, expects a D object class B *get_d(); // Returns a pointer to a D object // File1.cpp #include "File1.h" #include "File2.h" void f() { B *v = get_d(); g(v); } // File2.cpp #include// "File2.h" #include "File1.h" #include <iostream> class Hah { protected: short s; public: Hah() : s(12) {} }; class D : public Hah, public B { float f; public: D() : Hah(), B(), f(1.2f) {} void do_something() { std::cout << "f: " << f << ", d: " << d << ", s: " << s << std::endl; } }; ... all contents are identical until ... void g(B *d) { D *t = staticdynamic_cast<D *>(d); if (t) { t->do_something(); } else { // Handle error } } B *get_d() { return new D; } |
...