Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Как присвоить значения вводимые пользователем
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Gansss Gansss вне форума
Member
 
Сообщений: 91
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.05.2006
По умолчанию Как присвоить значения вводимые пользователем - 05.10.2006, 11:46

решил разобрать классы на сложении двух чисел... создал форму, кинул на нее Edit1, Edit2, Button1, Memo1. Создал класс:
class calc
{
pablic:
calc();
private:
int x;
int y;
};
("x" и "y" сделал закрытыми потому что хочу разобраться как работать с закрытыми данными);
Вопро:
как присвоить "х" и "у" значения вводимые пользователем в Edit1 b Edit2, потом при нажатии на кнопку Button1 они складывались и ответ появился в Memo1.

Вроде надо создать функцию в public для осуществления доступа к этим перменным но низнаю как это все написать
Ответить с цитированием
  (#2 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 05.10.2006, 12:22

Доступ к закрытым полям часто организуют через методы
Код:
void calc::setX(int AX)
{
  x = AX;
}
P.S.public
Ответить с цитированием
  (#3 (permalink)) Старый
Gansss Gansss вне форума
Member
 
Сообщений: 91
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.05.2006
По умолчанию 05.10.2006, 13:50

Цитата:
Доступ к закрытым полям часто организуют через методы
Код:
void setX(int AX)
{
  x = AX;
}
P.S.public
как этим переменным присвоить значение вводимые в эдит?
как эти методы использовать при обработке события буттонклик?
напиши пожалуйста весь код...
я знаю как это делать с обыкновенными переменными, а с классами мой мозг виснуть начинает
очень хочется понять .
В С++ без знания class'ов делать нечего?
Ответить с цитированием
  (#4 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 05.10.2006, 14:02

Цитата:
как этим переменным присвоить значение вводимые в эдит?
как эти методы использовать при обработке события буттонклик?
напиши пожалуйста весь код...
Например так:
Код:
 ....::OnButtonClick()
{
     setX( getXFromForm() );
     setY( getYFormForm() );
    print_to_memo( summ() );
}
Ответить с цитированием
  (#5 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 05.10.2006, 16:10

2Narwal: что то как то не так

2Gansss:
Описания класса недостаточно
Описывая класс, ты еще не выделяешь память для хранения объекта...
Для начала нужно создать объект твоего класса.
Код:
calc a;//создаешь объект а класса calc
calc *b=new calc();//можно так, тогда объект будет размещен в динамической памяти, но его тогда и удалить надо будет: delete b;
Объект создали. Теперь к его открытым полям и методам можно обращатся так же, как в С к полям структур, через . (в случае указателя через ->) , т.е
Код:
a.setX(10);//значение поля x станет равным 10
b->setX(20);//для работы с указателем используем оператор ->
Для доступа к закрытым полям принято организовывать пару методов: set(для установки значения) и get(для получения значения). В теле данных методов осуществляются всевозможные проверки и производятся необходимые дополнительные вычисления.
Теперь по поводу Edit'ов:
Код:
a.SetX(StrToInt(Edit1->Text));//установка значения поля x объекта a
Edit1->Text = IntToStr(a.getX());//получения значения поля x и вывод его в Edit1
ЗЫ: код писал без проверок, так что могут быть опечатки


импортирован с progz.ru
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 05.10.2006, 16:27

Цитата:
2Narwal: что то как то не так :-)
А чего как-то не так-то? :upset:
Ответить с цитированием
  (#7 (permalink)) Старый
Gansss Gansss вне форума
Member
 
Сообщений: 91
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.05.2006
По умолчанию 05.10.2006, 16:40

Цитата:
ЗЫ: код писал без проверок, так что могут быть опечатки ;-)
ну вот что то для меня начинает проясняться потихоньку :look: .......... но тема явно незакрыта....... пока..... для меня :!:
Ответить с цитированием
  (#8 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 05.10.2006, 19:07

Цитата:
А чего как-то не так-то? :upset:
Наверное, метод действительно лучше для объекта вызывать, а не сам по себе :)
Ответить с цитированием
  (#9 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 05.10.2006, 19:14

Цитата:
Наверное, метод действительно лучше для объекта вызывать, а не сам по себе :)
А...Вы в этом смысле ( Это у меня был недокументированный заскок, что OnButtonClick() - член класса Calc ) :oops:
Ответить с цитированием
  (#10 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 05.10.2006, 23:56

Цитата:
А...Вы в этом смысле ( Это у меня был недокументированный заскок, что OnButtonClick() - член класса Calc )
Да ладно, с кем не бывает
Цитата:
ну вот что то для меня начинает проясняться потихоньку .......... но тема явно незакрыта....... пока..... для меня
Так что осталось не ясно?


импортирован с progz.ru
Ответить с цитированием
  (#11 (permalink)) Старый
Gansss Gansss вне форума
Member
 
Сообщений: 91
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.05.2006
По умолчанию 06.10.2006, 11:37

Цитата:
Да ладно, с кем не бывает ;-) Так что осталось не ясно?


Не понятно вот чего:
Если я хочу создать функцию(например переда данных от ClientSocket1'a на ServerSocket1, из двух Edit'ов) в разделе private
мне ее тамже полностью описывать нужно?

то что пытаюсь сделать:

Код:
class TADOjoin
{
   private: AnsiString Name;
                 AnsiString Pass;
                 void TADOjoin::Issue (AnsiString Name, AnsiString Pass)   
               {
                   ClientSocket1->//здесь начинает ругаться!
               }

    public: void TADOjoin::SetName(AnsiString SName){Name=SName;}
                 void TADOjoin::SetPass(AnsiString SPass){Name=SPass;}

};
я в принципе понимаю почему он ругаться начинает.... тока не понимаю как функцию правильно описать
Ответить с цитированием
  (#12 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 06.10.2006, 14:06

Для начала несколько замечаний :
Во-первых, ты уверен в том, что данный класс действительно полезен? Не будет ли лучше оформить данную функцию как метод формы? Не нужно плодить классы без надобности. Если не уверен, то дальше можешь не читать .
Во-вторых, почему метод Issue() было решено сделать закрытым?
В-третьих, когда реализацию метода делаешь в теле описании класса , то область видимости указывать необязательно...т.е. TADOjoin:: перед именем метода можно не писать.

А теперь по-поводу ругани компилятора. ClientSocket1 явлется не глобальным объектом, а полем класса формы(ну TForm1, например).Поэтому компилятор и матерится, не знает он никакой ClientSocket1.
Для решения данной проблемы существует несколько способов.
Самый простой вариант - воспользоватся тем, что существует глобальный указатель на твою форму, к которому можно обратиться, т.е.
Код:
Form1->ClientSocket1->...
Так же указатель на форму можно хранить и в качестве поля класса TADOjoin, ИМХО так красивее и логичнее будет.


импортирован с progz.ru
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Narwal Narwal вне форума
Member
 
Сообщений: 1,039
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2003
По умолчанию 06.10.2006, 14:19

Код:
 
 void TADOjoin::SetPass(AnsiString SPass){Name=SPass;}
Метод, кстати, написан с логической ошибкой.

Может, Страуструпа, например, почитать стоит?
Или чего-нибудь на тему С++?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять проблема с моим пользователем! Аквамаринка Любые вопросы от новичков 8 25.11.2011 20:28
Где хранятся вводимые пароли на компьютере Алина88 Вопросы начинающих программистов 17 18.11.2010 18:52
Что с пользователем ?!?!?!?! MAXcheb Windows XP 0 11.04.2010 17:03
Ввод полиномов пользователем на C++ Марьюшка Вопросы начинающих программистов 0 20.02.2008 02:45
Изменение пользователем содержимого ячейки DataGrid Оксана_laz .NET 1 08.07.2006 03:58
PrintArea в Excel как присвоить значения SilverV Delphi 11 31.05.2006 13:24
Написание программы, печатающей вводимые слова по одному в строке на C++ Aleksa Вопросы начинающих программистов 16 09.05.2006 13:01
Как прочитать данные построчно и присвоить значения переменным st1 и st2 uzwer123 C++ Builder 6 03.01.2006 18:50
Метод повтора, определенный пользователем [Loki] Prolog 2 23.10.2005 23:37
Как узнать индекс строки, выбранной пользователем Artycs C++ Builder 2 21.09.2005 19:51
Как переменным присвоить значения 23 kasyava C++ Builder 2 08.08.2005 10:16
Как присвоить значения HRESULT Sosed C++ Builder 2 07.04.2005 16:45



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов