Вот такая проблема.
В программе есть три класса.
class Prototype
{
//...
virtual void Move()=0;
};
class Ball:public Prototype
{
//...
virtual void Initialize();
virtual void Move(); // уже что-то в ней написано
};
class UserBall:public Ball
{
void Initialize();
void Move(); //завершает иерархию наследования
};
//......
Prototype* a= new UserBall();
a->Initialize();
//...
В классе UserBall нет ничего кроме указанной функции.
Как мне сделать,чтобы при выполнении некоторого условия экземпляр класса UserBall приводился к типу своего предка Ball?
Здравствуйте, Maslennikov, Вы писали:
M>Как мне сделать,чтобы при выполнении некоторого условия экземпляр класса UserBall приводился к типу своего предка Ball?
Отношения наследования фиксированы во время прогона программы, поэтому ответ на твой вопрос: никак. Желаемое поведение можно достичь, реализовав что-то вроде QueryInterface
... << RSDN@Home 1.2.0 alpha rev. 648>>
Здравствуйте, Maslennikov, Вы писали:
M>Вот такая проблема.
M>В программе есть три класса.
M>
M>class Prototype
M>{
M> //...
M> virtual void Move()=0;
M>};
M>class Ball:public Prototype
M>{
M> //...
M> virtual void Initialize();
M> virtual void Move(); // уже что-то в ней написано
M>};
M>class UserBall:public Ball
M>{
M> void Initialize();
M> void Move(); //завершает иерархию наследования
M>};
M> //......
M> Prototype* a= new UserBall();
a->>Initialize();
M> //...
M>
M>В классе UserBall нет ничего кроме указанной функции.
M>Как мне сделать,чтобы при выполнении некоторого условия экземпляр класса UserBall приводился к типу своего предка Ball?
Нужно метод предка вызвать что-ли?
Попробуй так:
a->Ball::Move();