1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <iostream> #define CLASS(name) \ virtual std::string className() { \ return #name; \ } class A { public: CLASS(A) A(){} ~A(){} void output() { std::cout << className() << std::endl; } }; class B: public A{ public: CLASS(B) B(){} ~B(){} }; int main() { B b; b.output(); // This obviously outputs "A" but I would // like it to output "B" from the base class // function return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBDTEFTUyhuYW1lKSAgICAgICAgICAgICAgXAogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBjbGFzc05hbWUoKSB7ICAgIFwKICAgICAgICByZXR1cm4gI25hbWU7ICAgICAgICAgICAgXCAgICAgCiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCgpjbGFzcyBBIHsKcHVibGljOgogICBDTEFTUyhBKSAKCiAgIEEoKXt9CiAgIH5BKCl7fSAgCgogICB2b2lkIG91dHB1dCgpIHsKICAgICAgIHN0ZDo6Y291dCA8PCBjbGFzc05hbWUoKSA8PCBzdGQ6OmVuZGw7CiAgIH0KfTsKCmNsYXNzIEI6IHB1YmxpYyBBewpwdWJsaWM6CiAgIENMQVNTKEIpCiAgIEIoKXt9CiAgIH5CKCl7fQp9OwoKaW50IG1haW4oKSB7CiAgIEIgYjsKICAgYi5vdXRwdXQoKTsgICAgLy8gVGhpcyBvYnZpb3VzbHkgb3V0cHV0cyAiQSIgYnV0IEkgd291bGQKICAgICAgICAgICAgICAgICAgLy8gbGlrZSBpdCB0byBvdXRwdXQgIkIiIGZyb20gdGhlIGJhc2UgY2xhc3MKICAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24KICAgcmV0dXJuIDA7Cn0K
-
upload with new input
-
result: Success time: 0.02s memory: 2856 kB returned value: 0
B


