#include <iostream>
class Animal {
protected:
int a;
public:
friend void Swap(Animal &A,Animal &B);
int GetA() const { return a; }
};
void Swap(Animal &A, Animal &B) {
int i = A.a;
A.a = B.a;
B.a = i;
}
class People : public Animal
{
public:
People() {
a = 1;
}
};
class Fish : public Animal
{
public:
Fish() {
a = 2;
}
};
Animal *gA, *gB;
int main() {
gA = new People;
gB = new Fish;
std::cout << gA->GetA() << ", " << gB->GetA() << std::endl;;
Swap(*gA, *gB);
std::cout << gA->GetA() << ", " << gB->GetA() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgpjbGFzcyBBbmltYWwgewogcHJvdGVjdGVkOgogIGludCBhOwogcHVibGljOgogIGZyaWVuZCB2b2lkIFN3YXAoQW5pbWFsICZBLEFuaW1hbCAmQik7CiAgaW50IEdldEEoKSBjb25zdCB7IHJldHVybiBhOyB9Cn07Cgp2b2lkIFN3YXAoQW5pbWFsICZBLCBBbmltYWwgJkIpIHsKICBpbnQgaSA9IEEuYTsKICBBLmEgPSBCLmE7CiAgQi5hID0gaTsKfQoKY2xhc3MgUGVvcGxlIDogcHVibGljIEFuaW1hbAp7CiAgcHVibGljOgogICAgUGVvcGxlKCkgewogICAgICBhID0gMTsKICAgIH0KfTsKCmNsYXNzIEZpc2ggOiBwdWJsaWMgQW5pbWFsCnsKICBwdWJsaWM6CiAgICBGaXNoKCkgewogICAgICBhID0gMjsKICAgIH0KfTsKCkFuaW1hbCAqZ0EsICpnQjsKCmludCBtYWluKCkgewogIGdBID0gbmV3IFBlb3BsZTsKICBnQiA9IG5ldyBGaXNoOwogIHN0ZDo6Y291dCA8PCBnQS0+R2V0QSgpIDw8ICIsICIgPDwgZ0ItPkdldEEoKSA8PCBzdGQ6OmVuZGw7OwogIFN3YXAoKmdBLCAqZ0IpOwogIHN0ZDo6Y291dCA8PCBnQS0+R2V0QSgpIDw8ICIsICIgPDwgZ0ItPkdldEEoKSA8PCBzdGQ6OmVuZGw7CiAgcmV0dXJuIDA7Cn0K