Доопределение методов подклассов при наследовании
От: Acteon  
Дата: 17.06.10 13:13
Оценка:
Добрый день.

Возникла такая проблема (см. код ниже). Необходимо доопределить метод 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.