Преобразование типов
От: Maslennikov Украина  
Дата: 11.05.06 13:13
Оценка:
Вот такая проблема.
В программе есть три класса.



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?
Re: Преобразование типов
От: Anton V. Kolotaev  
Дата: 11.05.06 13:39
Оценка:
Здравствуйте, Maslennikov, Вы писали:

M>Как мне сделать,чтобы при выполнении некоторого условия экземпляр класса UserBall приводился к типу своего предка Ball?


Отношения наследования фиксированы во время прогона программы, поэтому ответ на твой вопрос: никак. Желаемое поведение можно достичь, реализовав что-то вроде QueryInterface
... << RSDN@Home 1.2.0 alpha rev. 648>>
Re: Преобразование типов
От: Константин Л. Россия  
Дата: 11.05.06 14:35
Оценка:
Здравствуйте, 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();
Estuve en Granada y me acorde' de ti
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.