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 | struct Shape { struct subtype { enum { Shape, Circle, Rectangle, ColoredCircle }; }; virtual bool is_a( int type ) const { return type == subtype::Shape; } virtual bool is_equal(const Shape& s) const { return false; } }; struct Rectangle : Shape { virtual bool is_a( int type ) const { return type == subtype::Rectangle || Shape::is_a(type); } virtual bool is_equal(const Shape& s) const { if (!s.is_a(subtype::Rectangle)) return false; const Rectangle& r = static_cast<const Rectangle&>(s); return true; // or check width and height } }; struct Circle : Shape { virtual bool is_a( int type ) const { return type == subtype::Circle || Shape::is_a(type); } virtual bool is_equal(const Shape& s) const { if (!s.is_a(subtype::Circle)) return false; const Circle& c = static_cast<const Circle&>(s); return true; // or check radius } }; struct ColoredCircle : Circle { virtual bool is_a( int type ) const { return type == subtype::ColoredCircle || Circle::is_a(type); } }; int main(void) { Rectangle x; Shape y; return x.is_equal(y); } |
c3RydWN0IFNoYXBlCnsKICAgIHN0cnVjdCBzdWJ0eXBlIHsgZW51bSB7IFNoYXBlLCBDaXJjbGUsIFJlY3RhbmdsZSwgQ29sb3JlZENpcmNsZSB9OyB9OwoKICAgIHZpcnR1YWwgYm9vbCBpc19hKCBpbnQgdHlwZSApIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gc3VidHlwZTo6U2hhcGU7IH0KICAgIHZpcnR1YWwgYm9vbCBpc19lcXVhbChjb25zdCBTaGFwZSYgcykgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KfTsKCnN0cnVjdCBSZWN0YW5nbGUgOiBTaGFwZQp7CiAgICB2aXJ0dWFsIGJvb2wgaXNfYSggaW50IHR5cGUgKSBjb25zdCB7IHJldHVybiB0eXBlID09IHN1YnR5cGU6OlJlY3RhbmdsZSB8fCBTaGFwZTo6aXNfYSh0eXBlKTsgfQogICAgdmlydHVhbCBib29sIGlzX2VxdWFsKGNvbnN0IFNoYXBlJiBzKSBjb25zdAogICAgewogICAgICAgIGlmICghcy5pc19hKHN1YnR5cGU6OlJlY3RhbmdsZSkpIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCBSZWN0YW5nbGUmIHIgPSBzdGF0aWNfY2FzdDxjb25zdCBSZWN0YW5nbGUmPihzKTsKICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gb3IgY2hlY2sgd2lkdGggYW5kIGhlaWdodAogICAgfQp9OwoKc3RydWN0IENpcmNsZSA6IFNoYXBlCnsKICAgIHZpcnR1YWwgYm9vbCBpc19hKCBpbnQgdHlwZSApIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gc3VidHlwZTo6Q2lyY2xlIHx8IFNoYXBlOjppc19hKHR5cGUpOyB9CiAgICB2aXJ0dWFsIGJvb2wgaXNfZXF1YWwoY29uc3QgU2hhcGUmIHMpIGNvbnN0CiAgICB7CiAgICAgICAgaWYgKCFzLmlzX2Eoc3VidHlwZTo6Q2lyY2xlKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IENpcmNsZSYgYyA9IHN0YXRpY19jYXN0PGNvbnN0IENpcmNsZSY+KHMpOwogICAgICAgIHJldHVybiB0cnVlOyAvLyBvciBjaGVjayByYWRpdXMKICAgIH0KfTsKCnN0cnVjdCBDb2xvcmVkQ2lyY2xlIDogQ2lyY2xlCnsKICAgIHZpcnR1YWwgYm9vbCBpc19hKCBpbnQgdHlwZSApIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gc3VidHlwZTo6Q29sb3JlZENpcmNsZSB8fCBDaXJjbGU6OmlzX2EodHlwZSk7IH0KfTsKCmludCBtYWluKHZvaWQpCnsKICAgIFJlY3RhbmdsZSB4OwogICAgU2hhcGUgeTsKICAgIHJldHVybiB4LmlzX2VxdWFsKHkpOwp9Cg==
prog.cpp: In member function ‘virtual bool Rectangle::is_equal(const Shape&) const’: prog.cpp:15: warning: unused variable ‘r’ prog.cpp: In member function ‘virtual bool Circle::is_equal(const Shape&) const’: prog.cpp:26: warning: unused variable ‘c’
-
upload with new input
-
result: Success time: 0s memory: 2720 kB returned value: 0


