Добрый день.
Возникла такая проблема (см. код ниже). Необходимо доопределить метод run() в классе BaseThread в наследнике класса Base классе ConcreateClass. Первая идея которая у меня возникла, просто обратиться к методу класса Base переопределенному в ConcreateClass. Так и буду пока делать. Но теперь у меня академический интерес, какие еще могут быть способы решения.
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
// I can't change this class.
class Thread
{
public:
virtual ~Thread() {}
void start()
{
run();
}
private:
virtual void run()
{
cout << "Thread::run()" << endl;
}
};
//////////////////////////////////////////////////////////////////////////
class Base
{
public:
void start()
{
baseThread.start();
}
protected:
class BaseThread: public Thread
{
public:
void someUsefulStuff()
{
cout << "BaseThread::someUsefulStuff()" << endl;
}
};
BaseThread baseThread;
};
class ConcreateClass: public Base
{
public:
void useStuff()
{
baseThread.someUsefulStuff();
}
private:
//////////////////////////////////////////////////////////////////////////
// As example what I want to receive.
class BaseThread: public Thread
{
void run()
{
cout << "ConcreateClass::BaseThread::run()" << endl;
}
};
//////////////////////////////////////////////////////////////////////////
};
int main()
{
ConcreateClass concreateClass;
concreateClass.start();
concreateClass.useStuff();
return 0;
}
Работающий пример:
http://codepad.org/emShN0Dg