Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Devil_Hell
13 / 13 / 1
Регистрация: 23.09.2008
Сообщений: 33
#1

Класс который рисует на экране звезду - C++

24.11.2008, 20:29. Просмотров 1057. Ответов 2
Метки нет (Все метки)

Помогите исправить ошибку. Нужно создать класс которорый рисует на экране звезду. Класс написал и все работало, но надо сделать наследование. В одной задаче сделал, но тут не получается. Помогите. Может что не правильно пишу.
вот код
Код
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <string.h>

// Объявление глобальных переменных
 int n,l,Radius,h,w,werh,k;    //объявление переменной
 int koordinat [22];
 int poly[22]= { 196, 1,       //вершины
		224, 68,
		292, 68,
		240, 113,
		264, 180,
		196, 140,
		129, 180,
		156, 112,
		101, 68,
		169, 68,
		196, 1
	      };



//класс фигура
class Figure
{
protected:
  int Color;
  int CenterX;
  int CenterY;

public:
  Figure(int iCenterX, int iCenterY)
  {
    Color = RED;
    CenterX = iCenterX;
    CenterY = iCenterY;
  }
  void SetNewColor(int NewColor)
  {
    Hide();
    Color=NewColor;
    Show();
  }
  virtual void Show() = 0;
  virtual void Hide()
  {
    int prev_col = Color;
    Color=getbkcolor();
    Show();
    Color = prev_col;
  }
  void Move(int DeltaX, int DeltaY)
  {
    Hide();
    CenterX+=DeltaX;
    CenterY+=DeltaY;
    Show();
  }
  virtual ~Figure()
  {};
};


class Mnogoug: public Figure
{
private:
int k;
int iCenterY;
public:
 Mnogoug (int iCenterX, int koor[22]) :
 Figure(iCenterX, iCenterY)
{
 werh = iCenterX;
// for (i=0; i<22; i++);
 koordinat[22] = koor[22];
 }
 void Show();

};

void Mnogoug::Show()
{
 drawpoly (werh,koordinat);
// Show();
}



//класс окружность
class Circle: public Figure
{
private:
public:
  Circle(int iCenterX, int iCenterY, int iRadius) :
    Figure(iCenterX, iCenterY)
  {
     Radius = iRadius;
  }
  void Show();
};

// класс прямоугольник
class Rectangle: public Figure
{
private:
public:
  Rectangle(int iCenterX, int iCenterY, int ih, int iw) :
    Figure(iCenterX, iCenterY)
  {
       h = ih;
       w = iw;
  }
  void Show();
};

// класс сообщение
class Message: public Figure
{
private:
  char* String;
public:
  Message(int iCenterX, int iCenterY, char* Msg) :
    Figure(iCenterX, iCenterY)
  {
     String = new char [strlen(Msg)+1];
     strcpy(String, Msg);
  }
  void Show();
  ~Message()
  {
     delete String;
  }
};

//методы окружности
void Circle::Show()
{
  circle(CenterX, CenterY, Radius);
}

// метеды прямоугольника
void Rectangle::Show()
{
  rectangle(CenterX, CenterY, CenterX+w, CenterY+h);
}

// метод сообщение
void Message::Show()
{
  outtextxy(CenterX, CenterY, String);
}

/*---------------------------------------------------*/



void main()
{
  // инициализация графики
   int gdriver = DETECT, gmode, errorcode;
  initgraph(&gdriver, &gmode,"c:\\work\\tc\\bgi");
  errorcode = graphresult();
  if (errorcode != grOk)
  {
     cerr<<"Graphics error";
     cerr<<grapherrormsg(errorcode);
     exit(1);
  }
 restorecrtmode(); //временный переход в тестовый режим.
 for (int k=0; k<22; k++)
  koordinat [k] = poly[k];

 do{ //цикл для повтора программы
   do {      //начало цикла с постусловием вывода меню
    clrscr(); //очистка экрана
       cout << "Выбирете фигуру\n";      //создание меню
       cout << "1 - Прямоугольник\n";
       cout << "2 - Окружность\n";
       cout << "3 - Текст\n";
       cout << "4 - Звезда \n";
       cout << "5 - Выход\n";
       cin >> n;    //считавание выбранного пункта

  }while (n>5);    //конец цикла для вывода меню
 setgraphmode(gmode); //возврат в гарфический режим
 switch(n)  //опетатор выбора
 {           //открытие операторной скобки
  case 1:  {
	      Rectangle F2(20,20,100,100); //передача параметров в класс
	      F2.Show();		   //вызов метода класса
	   }
	  break;    			   //закрытие первого варанта выбора
  case 2:  {
	      Circle F1(145,100,70);	   //передача параметров в класс
	      F1.Show();		   //вызов метода класса
	   }
	  break;
  case 3:  {
	      Message F3(100,50, "Проект на СИ++ Кащеева Алексея гр. ЗЭВМ - 106");
	      F3.Show();
	   }
	  break;
  case 4: {   Mnogoug F4(11,poly);
	      F4.Show();
	  }break;
  case 5: exit(1); break;
 };                         //закрытие операторы выбора
 getch();   //задержка в программе, что бы видеть изображение на экране
 restorecrtmode(); //временный переход в текстовый режим
 }while (n<5); // Цикл для провтора программы.
 closegraph(); // закрытие графического режима
}              //операторная скобка закрытия программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2008, 20:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс который рисует на экране звезду (C++):

Написать программу, которая рисует на экране грустную рожицу - C++
Написать программу, которая рисует на экране грустную рожицу.

Написать программу, которая рисует на экране кривую Гильберта (использовать рекурсию) - C++
На рисунке показано как оно должно выглядеть.

Функция рисует на экране треугольник, высота которого зависит от переданного значения параметра - C++
Написать функцию, которая принимает один параметер типа int - высоту. Данная функция рисует на экране треугольник, высота которого зависит...

Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) - C++
Задача. Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат. Вообщем-то ни...

Класс для хранения координат прямоугольных «окон» на экране - C++
Класс для хранения координат прямоугольных «окон» на экране (хранить координаты левого верхнего и правого нижней вершин x1, y1 и x2, y2)....

Класс, который невозможно наследовать - C++
Как создать класс, который невозможно наследовать? Видимо, поместить конструктор в раздел private? Кто что скажет по этому поводу?

2
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
25.11.2008, 12:22 #2
Mnogoug (int wer, int koor[22]):Figure(iCenterX, iCenterY) \\здесь ругается
{
werh = wer;
for (int k=0; k<22; k++)
koordinat [k] = 0;
koordinat [k] = koor[k];
}
Это ты вообще что написал то?!?!?! Ты хоть мне объясни??? Конструктор???
0
Devil_Hell
13 / 13 / 1
Регистрация: 23.09.2008
Сообщений: 33
26.11.2008, 17:10  [ТС] #3
Отредактировал первоначальный код.
Пытался передать параметры. Пробывал по всякому но ничего не получается.
Код
class Mnogoug: public Figure
{
private:
int k;
int iCenterY;
public:
 Mnogoug (int iCenterX, int koor[22]) :
 Figure(iCenterX, iCenterY)
{
 werh = iCenterX;
// for (i=0; i<22; i++);
 koordinat[22] = koor[22];
 }
 void Show();

};

void Mnogoug::Show()
{
 drawpoly (werh,koordinat);
// Show();
}
как здесь передать массив? передавая в программе вот так
Код
 for (int k=0; k<22; k++)
  koordinat [k] = poly[k];
все работает. но мне нужно это в классе сделать а как не знаю. ничего у меня не полуается
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2008, 17:10
Привет! Вот еще темы с ответами:

Макрос который создает класс - C++
Создал макрос который создает класс, но почему то он не работает, инициализация класса не происходит???? #include &lt;iostream&gt; using...

Класс, который удаляет из строки все пробелы - C++
Нужен класс, который удаляет из строки все пробелы. Как сие лучше реализовать? Придумалось вот такое: #include &lt;iostream&gt; #include...

Написать класс, который создает и выводит массив - C++
Помогите изменить этот код чтобы был класс который создает и выводит мой массив)7 #include &lt;iostream&gt; using namespace std; void...

Написать класс, который бы инкапсулировал массив окружности - C++
Привет всем! Вообщем писал программу, в которой цель была - написать класс, который бы инкапсулировал массив окружности. Собственно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.