#include <iostream>
using std::cout; using std::endl;
class Base1
{
public:
virtual void func1() = 0;
};
class Base2
{
public:
virtual void func1();
};
void Base2::func1()
{
cout << "Base2::func1()" << endl;
}
class Derived1 : public Base1, public Base2
{
public:
};
class Derived2 : public Base1
{
public:
virtual void func1();
private:
Base2 m_base2;
};
void Derived2::func1()
{
m_base2.func1();
}
int main()
{
// Derived1 d1;
// d1.func1();
Derived2 d2;
d2.func1();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNvdXQ7IHVzaW5nIHN0ZDo6ZW5kbDsKCmNsYXNzIEJhc2UxCnsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBmdW5jMSgpID0gMDsKfTsKCmNsYXNzIEJhc2UyCnsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBmdW5jMSgpOwp9OwoKdm9pZCBCYXNlMjo6ZnVuYzEoKQp7CiAgY291dCA8PCAiQmFzZTI6OmZ1bmMxKCkiIDw8IGVuZGw7Cn0KCmNsYXNzIERlcml2ZWQxIDogcHVibGljIEJhc2UxLCBwdWJsaWMgQmFzZTIKewpwdWJsaWM6Cn07CgpjbGFzcyBEZXJpdmVkMiA6IHB1YmxpYyBCYXNlMQp7CnB1YmxpYzoKICB2aXJ0dWFsIHZvaWQgZnVuYzEoKTsKcHJpdmF0ZToKICBCYXNlMiBtX2Jhc2UyOwp9OwoKdm9pZCBEZXJpdmVkMjo6ZnVuYzEoKQp7CiAgbV9iYXNlMi5mdW5jMSgpOwp9CgppbnQgbWFpbigpCnsKLy8gIERlcml2ZWQxIGQxOwovLyAgZDEuZnVuYzEoKTsKICBEZXJpdmVkMiBkMjsKICBkMi5mdW5jMSgpOwp9Cg==