IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Классы. Конструктор
сообщение
Сообщение #1


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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;
}


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

int main (void){

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

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

SH.Decart();

getche();

CloseGraph();

return 0;
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А если убрать, то он вообще не вызывается, по крайней мере не выводит cout << ... который в нем (в конструкторе) unsure.gif

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Потому что в конструкторе должны использоваться функции, доступные ПОСЛЕ инициализации графики, следовательно и вызываться конструктор должен после OpenGraph blum.gif
int main (void){

OpenGraph("");

Shedule SH;

SH.Decart();

getche();

CloseGraph();

return 0;
}

?
(TC++ 3.0)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


good.gif

Конечно, ведь при инициализации граф режим уже должен быть активирован, спасибо.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 18.11.2017 8:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"