#include <iostream>
class Base {
public:
virtual int myFunc1 () = 0;
virtual int myFunc2 () = 0;
};
class Derived1 : public Base {
public:
int myFunc1 () { return 1; }
int myFunc2 () { return 2; }
};
class Derived2 : public Base {
public:
int myFunc1 () { return 3; }
int myFunc2 () { return 4; }
};
void someFunction (Base* base) {
int x = base->myFunc1 ();
int y = base->myFunc2 ();
std::cout << (x * y) << std::endl;
}
int main () {
Derived1 d1;
Derived2 d2;
someFunction (&d1);
someFunction (&d2);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZSB7CglwdWJsaWM6CgkJdmlydHVhbCBpbnQgbXlGdW5jMSAoKSA9IDA7CgkJdmlydHVhbCBpbnQgbXlGdW5jMiAoKSA9IDA7Cn07CgpjbGFzcyBEZXJpdmVkMSA6IHB1YmxpYyBCYXNlIHsKCXB1YmxpYzoKCQlpbnQgbXlGdW5jMSAoKSB7IHJldHVybiAxOyB9CgkJaW50IG15RnVuYzIgKCkgeyByZXR1cm4gMjsgfQp9OwoKY2xhc3MgRGVyaXZlZDIgOiBwdWJsaWMgQmFzZSB7CglwdWJsaWM6CgkJaW50IG15RnVuYzEgKCkgeyByZXR1cm4gMzsgfQoJCWludCBteUZ1bmMyICgpIHsgcmV0dXJuIDQ7IH0KfTsKCnZvaWQgc29tZUZ1bmN0aW9uIChCYXNlKiBiYXNlKSB7CglpbnQgeCA9IGJhc2UtPm15RnVuYzEgKCk7CglpbnQgeSA9IGJhc2UtPm15RnVuYzIgKCk7CglzdGQ6OmNvdXQgPDwgKHggKiB5KSA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluICgpIHsKCURlcml2ZWQxIGQxOwoJRGVyaXZlZDIgZDI7CgkKCXNvbWVGdW5jdGlvbiAoJmQxKTsKCXNvbWVGdW5jdGlvbiAoJmQyKTsKfQ==