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 35 36 37 38 39 40 41 42 | #include <iostream> using namespace std; struct A { char const* value() const { return valueImpl(); } protected: virtual char const * valueImpl() { return "A"; } }; struct B { char const* value() const { return valueImpl(); } protected: virtual char const * valueImpl() const { return "B"; } }; class C : public A, public B { public: using B::value; }; int main() { C obj; cout << obj.value() << endl; A * ptr = &obj; cout << ptr->value() << endl; } |
I2luY2x1ZGUgPGlvc3RyZWFtPiAKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKIApzdHJ1Y3QgQSAKeyAKICAgIGNoYXIgY29uc3QqIHZhbHVlKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWVJbXBsKCk7CiAgICB9CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgY2hhciBjb25zdCAqIHZhbHVlSW1wbCgpIAogICB7IHJldHVybiAiQSI7IH0gCn07IAogCnN0cnVjdCBCIAp7IAogICAgY2hhciBjb25zdCogdmFsdWUoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB2YWx1ZUltcGwoKTsKICAgIH0KcHJvdGVjdGVkOgogICAgdmlydHVhbCBjaGFyIGNvbnN0ICogdmFsdWVJbXBsKCkgY29uc3QgCiAgICB7IHJldHVybiAiQiI7IH0gCn07IAogCmNsYXNzIEMgOiBwdWJsaWMgQSwgcHVibGljIEIgCnsgCnB1YmxpYzoKICAgdXNpbmcgQjo6dmFsdWU7CiAgICAKfTsgCiAKaW50IG1haW4oKSAKeyAKICAgIEMgb2JqOyAKICAgIGNvdXQgPDwgb2JqLnZhbHVlKCkgPDwgZW5kbDsgCiAKICAgIEEgKiBwdHIgPSAmb2JqOyAKICAgIGNvdXQgPDwgcHRyLT52YWx1ZSgpIDw8IGVuZGw7IAp9IAo=
prog.cpp: In member function 'const char* A::value() const': prog.cpp:9:26: error: passing 'const A' as 'this' argument of 'virtual const char* A::valueImpl()' discards qualifiers
-
result: Compilation error (maybe you wish to see an example for C++11)


