Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2011, 22:55   #1
Shadow94
Пользователь
 
Аватар для Shadow94
 
Регистрация: 17.04.2011
Сообщений: 18
По умолчанию ООП (наследование и полиморфизм)

Доброго времени суток.
Задача - имитация школьного урока, т.е. на экране должны быть парты, доска, ученики и преподаватель. Ученики представлены в виде кружка и треугольников (школьники - кружок и треугольник основанием вверх, школьницы - кружок и треугольник основанием вниз (как на туалетах)).
У меня есть абстрактный класс pupils, от него наследуются классы shkolnik и shkolnica. Но в классе pupils, можно сказать, есть только "голова" (которая наследуется), а "туловище", т.е. треугольник (мужской или женский) присоединяется в зависимости от пола.
Моя цель на данный момент - чтобы ученики случайным образом создавались и выводились на экран (как бы сидя за партами), с партами проблем нет, а вот сами ученики не хотят рисоваться...
Вот код (не весь):

Код:
//....................................
class pupils: virtual public point, public crircle
{
    public:
           pupils(int ix=0, int iy=0, int icolor=WHITE, int ir=0): point(ix,iy,icolor), crircle(ix,iy,icolor,ir)
    {}
    virtual void show()=0;
    ~pupils() {};     
};
//....................................
class shkolnik: virtual public pupils, public triangle_male
{
      public:
             shkolnik(int ix=0, int iy=0, int icolor=WHITE, int ir=0):pupils(ix,iy,icolor,ir), triangle_male(ix,iy,icolor,ir)
      {}
      void show()
      {
           crircle::show();
           triangle_male::show();
      }
            
};

class shkolnica: virtual public pupils, public triangle_female
{
      public:
             shkolnica(int ix=0, int iy=0, int icolor=WHITE, int ir=0):pupils(ix,iy,icolor,ir), triangle_female(ix,iy,icolor,ir)
      {}
      void show()
      {
           crircle::show();
           triangle_female::show();
      }
};
//....................................

int main()
{
 system("cls");
 srand(time(0));
 int i=0, j;
 initwindow(800,600);
 point *parta[9];
 pryamougolnik cabinet(80,60,RED,720,540);
 pryamougolnik doska(295,60,CYAN,505,140);
 pupils *pupil[9];


 for (i=0; i<3; i++)
 {
     parta[i]=new pryamougolnik(200+i*150, 240, BROWN, 320+i*150, 300);
     switch(rand()%2)
     {
                      case 0: pupil[i]=new shkolnik(260+i*150, 290, GREEN, 10); break;
                      case 1: pupil[i]=new shkolnica(260+i*150, 290, LIGHTMAGENTA, 10); break;
     }
 }
 
 for (i=3; i<6; i++)
 {
     if (i==3) j=0;
     if (i==4) j=1;
     if (i==5) j=2;
     parta[i]=new pryamougolnik(200+j*150, 340, BROWN, 320+j*150, 400);
     switch(rand()%2)
     {
                      case 0: pupil[i]=new shkolnik(260+j*150, 390, GREEN, 10); break;
                      case 1: pupil[i]=new shkolnica(260+j*150, 390, LIGHTMAGENTA, 10); break;
     }
 }

 for (i=6; i<9; i++)
 {
     if (i==6) j=0;
     if (i==7) j=1;
     if (i==8) j=2;
     parta[i]=new pryamougolnik(200+j*150, 440, BROWN, 320+j*150, 500);
     switch(rand()%2)
     {
                      case 0: pupil[i]=new shkolnik(260+j*150, 490, GREEN, 10); break;
                      case 1: pupil[i]=new shkolnica(260+j*150, 490, LIGHTMAGENTA, 10); break;
     }
 }

 cabinet.show();
 doska.show();

 for (i=0; i<9; i++)
 {
     parta[i]->show();
     pupil[i]->show();
 }




getch();
cleardevice();
 for (i=0; i<9; i++)
 {
     if (parta[i])
        parta[i]->~point();
     if (pupil[i])
        pupil[i]->~pupils();
 }
closegraph();
return 0;
}
Наверное я недопонимаю где-то чего-то. Может в наследовании накосячил, хотя проверил несколько раз, вроде всё так и должно быть. Препод тоже быстро пробежался глазами по коду, говорит вроде все нормально, хотя она торопилась, могла упустить что-то.
Помогите кто чем может, буду рад любой помощи))

P.S. Классы "круг", "треугольники" и "прямоугольники" наследуются от класса "точка", если это поможет разъяснить ситуацию.
P.P.S. Среда - Dev C++ (хотя особо не имеет значения в данном моменте).
То, что получается на экране, есть во вложении.
Изображения
Тип файла: jpg Безымянный.JPG (29.6 Кб, 149 просмотров)
Shadow94 вне форума Ответить с цитированием
Старый 20.11.2011, 23:30   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
triangle_female
Не смог дальше читать, упал под стол от смеха.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.11.2011, 23:43   #3
Shadow94
Пользователь
 
Аватар для Shadow94
 
Регистрация: 17.04.2011
Сообщений: 18
По умолчанию

Ctrl, лучше бы дельный совет дал) что пришло в голову первым, так и обозвал
Shadow94 вне форума Ответить с цитированием
Старый 20.11.2011, 23:53   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
лучше бы дельный совет дал
Иерархия чудовищна. Не нужно все строить на наследовании - есть ведь еще и агрегирование. Например, ученик скорее содержит голову и туловище, чем является ими.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 21.11.2011, 00:01   #5
Shadow94
Пользователь
 
Аватар для Shadow94
 
Регистрация: 17.04.2011
Сообщений: 18
По умолчанию

Ну в дальнейшем мне и надо сделать агрегацию... Я просто хотел сделать как бы промежуточный этап - чтобы это всё на экран выводилось. Видимо, ступил, надо было сразу к агрегации приступать. Правда я пока не знаю, как агрегацию сделать) только теоретически представляю
Shadow94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ОоП полиморфизм ... наследование ... Xsires Общие вопросы Delphi 2 04.09.2011 15:38
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07
Полиморфизм, наследование и деструкторы alex_triton Общие вопросы C/C++ 1 08.11.2009 17:52
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55