#include <iostream>
#include <string>
using namespace std;
class A {
public:
A(std::string s, int x) : m_s(s), m_x(x) {}
void print() { cout << "A::print(): str = " << m_s << ", x = " << m_x << endl; }
private:
std::string m_s;
int m_x;
};
class B {
public:
B(int x) : m_x(x) {}
void print() { m_x++; cout << "B::print(): x = " << m_x << endl; }
private:
int m_x;
};
int main(int argc, char **argv) {
A *a = new A("abc", 1);
a->print();
B *b = (B*)a;
b->print();
a->print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEEgewpwdWJsaWM6CiAgICAgICAgQShzdGQ6OnN0cmluZyBzLCBpbnQgeCkgOiBtX3MocyksIG1feCh4KSB7fSAKCiAgICAgICAgdm9pZCBwcmludCgpIHsgY291dCA8PCAiQTo6cHJpbnQoKTogc3RyID0gIiA8PCBtX3MgPDwgIiwgeCA9ICIgPDwgbV94IDw8IGVuZGw7IH0KCnByaXZhdGU6ICAKICAgICAgICBzdGQ6OnN0cmluZyBtX3M7CiAgICAgICAgaW50IG1feDsKfTsKCmNsYXNzIEIgewpwdWJsaWM6CiAgICAgICAgQihpbnQgeCkgOiBtX3goeCkge30KICAgICAgICB2b2lkIHByaW50KCkgeyBtX3grKzsgY291dCA8PCAiQjo6cHJpbnQoKTogeCA9ICIgPDwgbV94IDw8IGVuZGw7IH0KCnByaXZhdGU6CiAgICAgICAgaW50IG1feDsKCn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCiAgICAgICAgQSAqYSA9IG5ldyBBKCJhYmMiLCAxKTsKICAgICAgICBhLT5wcmludCgpOwogICAgICAgIEIgKmIgPSAoQiopYTsKICAgICAgICBiLT5wcmludCgpOwoKICAgICAgICBhLT5wcmludCgpOwoKICAgICAgICByZXR1cm4gMDsKfQ==