Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: 10-й класс
Рейтинг: 730
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 374
∙ повысить рейтинг >>
Серг aka umbSSE
Статус: 10-й класс
Рейтинг: 237
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1355 от 12.07.2009, 13:05
Администратор рассылки: Dr_Andrew, Модератор
В рассылке: подписчиков - 629, экспертов - 152
В номере: вопросов - 2, ответов - 3

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 170205: Здравствуйте эксперты, подскажите как при нажатии кнопки Button1 сделать так чтобы вызывался метод класс man create. как только не пытался писать: man1->create(); или man1.create(); не получается. ...


Вопрос № 170209: Здравствуйте уважаемые эксперты!Такой вопрос:подскажите как написать консольное приложение для поиска файла по имени,при этом путь к имени файла должен описываться методом construction(string drive),а сам поиск выполняется ,для определённого в к...

Вопрос № 170205:

Здравствуйте эксперты, подскажите как при нажатии кнопки Button1 сделать так чтобы вызывался метод класс man create.
как только не пытался писать:
man1->create();
или
man1.create();
не получается.

Отправлен: 06.07.2009, 19:17
Вопрос задал: Tribak, Студент
Всего ответов: 2
Страница вопроса >>


Отвечает Victor Pyrlik, Модератор :
Здравствуйте, Tribak.
Язык С/С++ конечно свободный, но все же надо придерживаться правил – классы объявляются в заголовочных файлах (с расширением .h) в отличии от Delphi.
Во вторых, классы создаются для организации логического контейнера, в котором есть приватные данные и функции – доступные только классу, публичные – внешние данные и функции и другие типы с которыми можно ознакомится более подробно в различных источниках, например тут URL >>Объектное программирование - классы

По Вашему вопросу – вот пример, немного подправленный, как более правильный подход с точки зрения ООП.

Код:
//---------------------------------------------------------------------------<
 br>
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

class man
{
private:
String name;
String fam;
public:
void create(String s1,String s2);
void show(TEdit *ed1,TEdit *ed2);
void pere(void);
};

void man::create(String s1,String s2)
{
fam = s1;
name = s2;
}

void man::show(TEdit *ed1,TEdit *ed2)
{
ed1->Text=fam;
ed2->Text=name;

}

void man::pere()
{
String pr = name;
name=fam;
fam=pr;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------- -------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
man m;
m.create(Edit1->Text,Edit2->Text);
m.show(Edit3,Edit4);
m.pere();
}
//------------- другой способ объявления------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
man *m = new man();
m->create(Edit1->Text,Edit2->Text);
m->show(Edit3,Edit4);
delete m;
}
//---------------------------------------------------------------------------


или альтернативный способ
Код:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//- --------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

struct man
{
String name;
String fam;
man(){name = ""; fam = "";};
man(String s1,String s2):name(s1),fam(s2)
{};



void SetDate(String s1,String s2)
{ name = s1; fam = s2;};

void show(TEdit *ed1,TEdit *ed2)
{ed1->Text=fam; ed2->Text=name;};

void pere(void)
{
String pr = name;
name=fam;
fam=pr;
};
};


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
man m(Edit1->Text,Edit2->Text);
m.show(Edit3,Edit4);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Butt on2Click(TObject *Sender)
{
man m;
m.SetDate(Edit1->Text,Edit2->Text);
m.show(Edit3,Edit4);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
man * m = new man(Edit1->Text,Edit2->Text);
m->show(Edit3,Edit4);
delete m;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
man * m = new man();
m->SetDate(Edit1->Text,Edit2->Text);
m->show(Edit3,Edit4);
delete m;
}
//---------------------------------------------------------------------------
Россия, Екатеринбург
Тел.: 89043822027
ICQ # 490191733

-----
Жизнь игрушка – пока играешь сам..

Ответ отправил: Victor Pyrlik, Модератор
Ответ отправлен: 06.07.2009, 19:27

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251923 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Dr_Andrew, Модератор :
    Здравствуйте, Tribak!
    Во-первых, замечания по Вашему коду.
    1. Вместо метода класса create, принятого в Delphi, в C++ используется конструктор класса - функция, название которой совпадает с именем класса. В отличие от других методов класса, конструктор не возвращает значений, даже void.
    2. Для обращения к методам объекта класса используется точка, а для вызова методов указателя на объект класса - стрелочка (->).
    3. Указатели на компоненты объявляются в заголовочном файле класса главной формы, не следует их дополнительно объявлять в модуле реализации формы.
    4. Объявление и реализацию собственного класса нужно делать в отдельных файлах, которые затем включать в проект.
    5. Вы не написали реализацию конструктора своего класса, но в то же время обращаетесь к нему.
    6. Не стоит обращаться к главной форме из собственного класса, напротив, лучше объект(ы) собственного класса сделать членами класса формы.
    7. При подключении (куда-либо) собств енного класса надо пользоваться директивой #include для включения заголовочного файла.
    В приложении приведён код программы, внешний вид которой представлен на рисунке ниже. При нажатии кнопки "Ввод" происходит создание нового указателя на объект класса TMan с использованием информации из полей ввода. Указатель на объект класса TMan* pMan является открытым членом класса главной формы приложения TMainForm. При нажатии кнопки "Обмен" происходит обмен имени и фамилии путём вызова метода pMan->Change();
    На рисунке ниже выделены те файлы, которые обязательно должны быть в Вашем проекте:


    Приложение:
    Казахстан, Алма-Ата
    Организация: Казахский научный центр карантинных и зоонозных инфекций
    Адрес сайта: Медицинские программы для Linux
    ICQ # 256452186

    Ответ отправил: Dr_Andrew, Модератор
    Ответ отправлен: 07.07.2009, 23:09

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251953 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 170209:

    Здравствуйте уважаемые эксперты!Такой вопрос:подскажите как написать консольное приложение для поиска файла по имени,при этом путь к имени файла должен описываться методом
    construction(string drive),а сам поиск выполняется ,для определённого в конструкторе пути к файлу, методом vector<string> Find(string fileName),где возвращается вектор найденных файлов,каждый элемент вектора-файловое имя с полностью определённым маршрутом. Метод блочный пока поиск является полный.Я с STL библиотекой плохо знакома,помогите организовать код либо дайте инфу по поводу этого.Заранее благодарна

    Отправлен: 06.07.2009, 20:46
    Вопрос задал: light1002, Посетитель
    Всего ответов: 1
    Страница вопроса >>


    Отвечает Совильски Августа Антоновна, 1-й класс :
    Здравствуйте, light1002! Немного не понятна фраза "Метод блочный пока поиск является полный". Приведу пример функции, которая принимает строку с начальной директорией поиска(это может быть корневая директория),строку с именем файла(но не маской,т.к. придется писать отдельную функцию для сравнения строки с маской) и указатель на вектор строк для записи результатов. Функция ищет заданный файл во всех поддиректориях данной директории. Она рекурсивна, поэтому в случае начала поиска из корневой директории с большим уровнем вложенности подкаталогов и большим количеством файлов будет работать крайне медленно.
    Исправленн передаваемый параметр
    -----
    ∙ Отредактировал: Victor Pyrlik, Модератор
    ∙ Дата редактирования: 11.07.2009, 13:52 (время московское)

    Приложение:

    Ответ отправил: Совильски Августа Антоновна, 1-й класс
    Ответ отправлен: 07.07.2009, 23:35

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 251954 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.5 от 08.07.2009

    В избранное