Помощь - Поиск - Пользователи - Календарь
Полная версия: Классы. Конструктор
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
klem4
smile.gif

Начал делать версию по интереснее и сразу напоролся, почему после инициализации, переменные "забывают" свои значения ? Вследствие чего координатные оси выводятся не по центру а из точки (0, 0). Я Сделал для проверки вывод текущих состояний точек X2, Y2, которые должны хранить кординаты центра экрана и как выяснилось они обнуляются после инициализации, почему ?


#include <graphics.h>
#include <conio.h>
#include <stdlib.h>

#include <iostream.h>

class Shedule{

  public :

	Shedule();

	void Decart();
	void Show();
	int  GetX(double x);
	int  GetY(double y);

	int (*Function) (float x);

	private :

	int X2, Y2, delta, d;
	double a, b, step;

};

Shedule :: Shedule(){
  X2	= getmaxx() / 2;
  Y2	= getmaxy() / 2;
  delta = 200;
  d	 = delta / 10;
  step  = 0.1;
  cout << X2 << " " << Y2 << endl; // TEST <-------------------- тут как видно все ок
};


int Shedule :: GetX(double x){
  return X2 + int(x);
};

int Shedule :: GetY(double y){
  return Y2 - int(y);
};

void Shedule :: Decart(){

  cout << X2 << " " << Y2; // TEST <---------------------------- а тут уже нули

  line(X2 - delta, Y2, X2 + delta, Y2);
  line(X2, Y2 - delta, X2, Y2 + delta);
  /*
  int i = X2 - delta;

  while (i <= X2 + delta){
	if ((i > X2) && (i < X2 + delta)){
	  char *s;
	  itoa((i - X2) / d, s, 10);
	  outtextxy(i - 3, Y2 + 5, s);
	}
	circle(i, Y2, 1);
	i += d;
  };

  i = Y2 - delta;

  while (i <= Y2 + delta){
	if ((i > Y2) && (i < Y2 + delta)){
	  char *s;
	  itoa((i - Y2)/ d, s, 10);
	  outtextxy(X2 - 10, i - 3, s);
	}
	circle(X2, i, 1);
	i += d;
  };
  */
};


int OpenGraph(char *s){

  int gd = DETECT, gm;

  initgraph(&gd, &gm, s);

  return graphresult();
}

int CloseGraph(){
  closegraph();
  return graphresult();
}

Shedule SH;

int main (void){

  OpenGraph("c:\\tc\\tc\\bgi");

  Shedule();

  SH.Decart();

  getche();

  CloseGraph();

  return 0;
}
volvo
blink.gif А чего это ты тут сделал?
Shedule SH; // Ну ДОПУСТИМ, это вызовет конструктор

int main (void){

  OpenGraph("c:\\tc\\tc\\bgi");

  Shedule(); // Это зачем?

  SH.Decart();

  getche();

  CloseGraph();

  return 0;
}
klem4
А если убрать, то он вообще не вызывается, по крайней мере не выводит cout << ... который в нем (в конструкторе) unsure.gif
volvo
Потому что в конструкторе должны использоваться функции, доступные ПОСЛЕ инициализации графики, следовательно и вызываться конструктор должен после OpenGraph blum.gif
int main (void){

  OpenGraph("");

  Shedule SH;

  SH.Decart();

  getche();

  CloseGraph();

  return 0;
}

?
(TC++ 3.0)
klem4
good.gif

Конечно, ведь при инициализации граф режим уже должен быть активирован, спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.