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

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


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

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

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

_Ayl_
Статус: Студент
Рейтинг: 1440
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1392
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 1245
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1450
Дата выхода:19.12.2009, 17:30
Администратор рассылки:Dr_Andrew, Старший модератор
Подписчиков / экспертов:679 / 181
Вопросов / ответов:6 / 8
IRC-канал по теме:#C

Вопрос № 175203: Здравствуйте эксперты, когда я создаю потомка какого-то класса, если я создаю конструктор своего класса то он используется вместо конструктора родителя, так же и с остальными функциями, можно ли как-то сделать так, чтобы исходный конструктор родителя...


Вопрос № 175211: Здравствуйте эксперты, есть свой класс, по некоторым его полям надо сделать сортировку при помощи стандартной библиотеки шаблонов STL. Дайте пожалуйста на какой-нибудь хороший материал, чтобы разобраться что к чему. ...
Вопрос № 175216: Здравствуйте эксперты, подскажите пожалуйста, при запуске программы надо чтобы была создана копия файла, то есть файл file, надо чтобы появился еще и file1, точно такой же, а затем после работы программы file надо удалить, а и переименовать file1 в f...
Вопрос № 175217: Здравствуйте эксперты, подскажите пожалуйста. Пишу в Microsoft Visual C++ следующий проект . У меня есть окно диалога, на нем есть элемент Combo. Если какая-нибудь функция, которая могла бы за...
Вопрос № 175228: Здравствуйте Уважаемые эксперты! Прошу помочь с программой: Необходимо определить класс ограниченного массива целых чисел, индексы элементов которого могут принимать отрицательные значения. Нижний их этих индексов устанавливается по умолчанию рав...
Вопрос № 175235: Здраствуйте, скажите пожалуйста как написать программу которая бы удаляла из памяти заранее указанные процессы ? Ну проще говоря автоматизация удаления оных вручную из диспетчера задач. Скажу сразу я в программировании весьма и весьма слаб
Вопрос № 175203:

Здравствуйте эксперты, когда я создаю потомка какого-то класса, если я создаю конструктор своего класса то он используется вместо конструктора родителя, так же и с остальными функциями, можно ли как-то сделать так, чтобы исходный конструктор родителя использовался, а мой лишь дополнял его?

Отправлен: 13.12.2009, 20:16
Вопрос задал: Tribak, Студент
Всего ответов: 1
Страница вопроса »


Отвечает Ashotn, 7-й класс :
Здравствуйте, Tribak.

Для некоторых производных классов нужны конструкторы. Если конструктор
есть в базовом классе, то именно он и должен вызываться с указанием
параметров, если таковые у него есть:

class employee {
// ...
public:
// ...
employee(char* n, int d);
};

class manager : public employee {
// ...
public:
// ...
manager(char* n, int i, int d);
};

Параметры для конструктора базового класса задаются в определении
конструктора производного класса. В этом смысле базовый класс
выступает как класс, являющийся членом производного класса:

manager::manager(char* n, int l, int d)
: employee(n,d), level(l), group(0)
{
}

Конструктор базового класса employee::employee() может иметь такое
определение:

employee::employee(char* n, int d)
: name(n), department(d)
{
next = list;
list = this;
}

Здесь list должен быть описан как статический член employee.
Объекты классов создаются снизу вверх: вначале базовые, затем
члены и, наконец, сами производные классы. Уничтожаются они в
обратном порядке: сначала сами производные классы, затем члены,
а затем базовые. Члены и базовые создаются в порядке описания их
в классе, а уничтожаются они в обратном порядке.

-----
Я ни от чего, ни от кого не завишу.

Ответ отправил: Ashotn, 7-й класс
Ответ отправлен: 13.12.2009, 18:37

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


    Вопрос № 175211:

    Здравствуйте эксперты, есть свой класс, по некоторым его полям надо сделать сортировку при помощи стандартной библиотеки шаблонов STL. Дайте пожалуйста на какой-нибудь хороший материал, чтобы разобраться что к чему.

    Отправлен: 13.12.2009, 21:16
    Вопрос задал: Tribak, Студент
    Всего ответов: 1
    Страница вопроса »


    Отвечает Ashotn, 7-й класс :
    Здравствуйте, Tribak.
    Можете почитать книгу Николай Джосьютис. C++ "Стандартная библиотека. Для профессионалов." Там даны и описания алгоритмов STL. Гугл дает много ссылок на нее. Желаю удачи.
    -----
    Я ни от чего, ни от кого не завишу.

    Ответ отправил: Ashotn, 7-й класс
    Ответ отправлен: 13.12.2009, 19:47

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


    Вопрос № 175216:

    Здравствуйте эксперты, подскажите пожалуйста, при запуске программы надо чтобы была создана копия файла, то есть файл file, надо чтобы появился еще и file1, точно такой же, а затем после работы программы file надо удалить, а и переименовать file1 в file. Насчет сделать копию я не знаю как, а как менять удалять я немного подзабыл, кажется DeleteFile и ReName, хотя не помню, вообще подскажите пожалуйста.
    Проект сам из прошлых моих вопросов.

    Отправлен: 13.12.2009, 21:46
    Вопрос задал: Tribak, Студент
    Всего ответов: 1
    Страница вопроса »


    Отвечает Сандров Алекс, Студент :
    Здравствуйте, Tribak.

    Копия файла:
    BOOL CopyFile(LPCTSTR lpИсточник, LPCTSTR lpНовыйФайл, BOOL bПроверитьСуществование)
    bПроверитьСуществование - если TRUE - тогда при существовании файла lpНовыйФайл, фунция ничего не скопирует и вернёт FALSE

    Удаление:
    BOOL DeleteFile( LPCTSTR lpИмяФайла);

    Перемещение:
    BOOL MoveFile( LPCTSTR lpИсточник, LPCTSTR lpНовыйФайл);

    Ответ отправил: Сандров Алекс, Студент
    Ответ отправлен: 14.12.2009, 06:27

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


    Вопрос № 175217:

    Здравствуйте эксперты, подскажите пожалуйста. Пишу в Microsoft Visual C++ следующий проект . У меня есть окно диалога, на нем есть элемент Combo. Если какая-нибудь функция, которая могла бы загрузить в него нужные строки из текстового файла? Если нет, то надо самостоятельно это сделать, напишите как это тогда заранее к нему обратится? Вызываю диалоговое окно через DoModal

    Отправлен: 13.12.2009, 22:01
    Вопрос задал: Tribak, Студент
    Всего ответов: 1
    Страница вопроса »


    Отвечает Сандров Алекс, Студент :
    Здравствуйте, Tribak.

    Для работы с Combo есть специальные оконные сообщения.

    Добавление: CB_ADDSTRING
    Удаление: CB_DELETESTRING
    Число элементов: CB_GETCOUNT
    Текущий элемент: CB_GETCURSEL
    и так далее(msdn knows...)

    Готовых функций, чтобы заполнить Combo из файла нету. Придётся построчно читать файл, потом эти строки заносить в Combo
    (читать файл построчно: fopen - открыть файл, fgets - вычитать строку, fclose - закрыть файл)

    Так как (я понял что) это MFC, не забываем проверять на нулёвость указатели на окна:

    в OnInitDialog:

    Код:
    CWnd *pWnd = GetDlgItem(IDC_COMBO);
    if(NULL != pWnd)
    {
    pWnd->SendMessage(CB_ADDSTRING, 0, LPARAM("New string 1"));
    pWnd->SendMessage(CB_ADDSTRI NG, 0, LPARAM("New string 2"));
    }


    Или, как "чистый" вариант для MFC:

    Код:
    CComboBox *pCombo = dynamic_cast<CComboBox*>(GetDlgItem(IDC_COMBO));
    if(NULL != pCombo)
    {
    pCombo->AddString("New string 1");
    pCombo->AddString("New string 2");
    }


    Или совсем универсальный вариант:

    Код:
    HWND hCombo = ::GetDlgItem(m_hWnd, IDC_COMBO);
    if(NULL != hCombo)
    {
    ::SendMessage(hCombo, CB_ADDSTRING, 0, LPARAM("New string 1" ));
    ::SendMessage(hCombo, CB_ADDSTRING, 0, LPARAM("New string 2"));

    }

    Ответ отправил: Сандров Алекс, Студент
    Ответ отправлен: 14.12.2009, 06:52

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


    Вопрос № 175228:

    Здравствуйте Уважаемые эксперты!
    Прошу помочь с программой: Необходимо определить класс ограниченного массива целых чисел, индексы элементов которого могут принимать отрицательные значения. Нижний их этих индексов устанавливается по умолчанию равным 1. Перегрузить операции:
    - значение элемента с заданным номером;
    - умножение всех элементов массива на целое число;
    - прибавление целого числа к каждому элементу массива;
    - операцию присваивания.
    Программа должна компилироваться в Microsoft Visual C++ 6.0.
    Заранее благодарен.

    Отправлен: 13.12.2009, 23:19
    Вопрос задал: Мих@ил, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Micren, Бакалавр :
    Здравствуйте, Мих@ил.
    Программа.С++.Проверял gcc.
    Код:
    #include <iostream>
    #include <memory>
    #include <cstring>
    #include <stdexcept>

    using std::cout;
    using std::cin;
    using std::endl;
    using std::auto_ptr;
    using std::ostream;
    using std::out_of_range;

    // Шаблонный класс-массив

    template<class T>
    class array
    {
    public:
    // Используемые типы
    typedef int index_type;
    typedef unsigned int size_type;
    // Конструкторы
    explicit array(size_type length = 10);
    array(index_type lo, size_type length);
    array(const array<T>& arr);
    // Оператор присваивания
    const array<T> & operator=(const array<T>& arr);
    // Возвращает минимальный индекс
    index_type lo() const;
    // Возвращает максимальный индекс
    index_type hi() const;
    // Возвращает размер
    size_type length() const;
    // Индексаторы
    T & operator[](index_type index);
    const T & operator[](index_type index) const;
    private:
    // Мин. индекс
    index_type _lo;
    // Длина
    size_type _length;
    // Данные
    auto_ptr<T> _data;
    template<class Ty> friend array<Ty> operator*(const array<Ty>& arr, Ty val);
    template<class Ty> friend array<Ty> operator+(const array<Ty>& arr, Ty val);
    };

    // Требуемые операторы
    template<class Ty> array<Ty> operator*(const array<Ty>& arr, Ty val);
    template<class Ty> array<Ty> operator*(Ty val, const array<Ty>& arr);
    template<class Ty> array<Ty> operator+(const array<Ty>& arr, Ty val);
    template< class Ty> array<Ty> operator+(Ty val, const array<Ty>& arr);

    template<class T> ostream & operator<<(ostream& stream, const array<T>& arr);

    int main()
    {
    // Создаем массив из 20 элементов с первым индексом -10
    array<int> arr(-10, 20);
    for (array<int>::index_type i = arr.lo(), end = i + arr.length(); i < end; ++i)
    {
    arr[i] = i;
    }
    cout << "lo:" << arr.lo() << endl
    << "hi:" << arr.hi() << endl
    << "length:" << arr.length() << endl;
    cout << "Array:" << arr << endl;
    cout << "Array*10:" << 10 * arr << endl;
    cout << "Array+10:" << 10 + arr << endl;
    return 0;
    }

    // Оператор вывода для массива

    template<class T>
    ostream & ope rator<<(ostream& stream, const array<T>& arr)
    {
    for (typename array<T>::index_type i = arr.lo(), end = i + arr.length(); i < end; ++i)
    {
    stream << arr[i] << ' ';
    }
    return stream;
    }

    template<class T>
    array<T>::array(typename array<T>::size_type length)
    : _lo(1)
    , _length(length)
    , _data(new T[length]())
    {
    }

    template<class T>
    array<T>::array(index_type lo, size_type length)
    : _lo(lo)
    , _length(length)
    , _data(new T[length]())
    {
    }

    // Оператор копирования
    template<class T>
    array<T>::array(const array<T>& arr)
    : _lo(arr._lo) // Копируем нижний индекс
    , _length(arr._length) // Копируем длину массива
    , _data(new T[arr._length]()) // Создадим массив с такой же длиной
    {
    // Копируем данные
    memcpy(_data.get(), arr._data.get(), _length * sizeof (T));
    }

    template<class T>
    const array<T>& array<T>::operator=(const array<T>& arr){
    if (this != &arr)
    {
    _data.reset(new T[_length = arr._length]());
    _lo = arr._lo;
    memcpy(_data.get(), arr._data.get(), _length * sizeof (T));
    }
    return *this;
    }

    template<class T>
    typename array<T>::index_type array<T>::lo() const
    {
    return _lo;
    }

    template<class T>
    typename array<T>::index_type array<T>::hi() const
    {
    return _lo - 1 + _length;
    }

    template<class T>
    typename array<T>::size_type array<T>::length() const
    {
    return _length;
    }

    template<class T>
    T& array<T>::operator[](index_type index)
    {
    if ((index -= _lo) < _length)
    {
    return *(_data.get() + index);
    }
    else throw out_of_range("Index out of bounds");
    }

    template<class T>
    const T& array<T>::operator[](index_type index) const
    {
    if ((index -= _lo) < _length)
    {
    return *(_data.get() + index);
    }
    else throw out_of_range("Index out of bounds");
    }

    // Оператор умножения массива на значение
    template<class Ty>
    array<Ty> operator*(const array<Ty>& arr, Ty val)
    {

    // Копируем массив в result
    array<Ty> result = arr;
    // Получим указатель на начало данных
    Ty* cur = result._data.get();
    // Указатель на конец данных
    const Ty * const end = cur + arr._length;
    // Перебираем данные
    while (cur != end)
    {
    // Умножаем каждый элемент и сдвигаем указатель на следующий
    *cur++ *= val;
    }
    return result;
    }

    template<class Ty>
    array<Ty> operator*(Ty val, const array<Ty>& arr)
    {
    return arr*val;
    }

    template<class Ty>
    array<Ty> operator+(const array<Ty>& arr, Ty val)
    {
    ar ray<Ty> result = arr;
    Ty* cur = result._data.get();
    const Ty * const end = cur + arr._length;
    while (cur != end)
    {
    *cur++ += val;
    }
    return result;
    }

    template<class Ty>
    array<Ty> operator+(Ty val, const array<Ty>& arr)
    {
    return arr + val;
    }

    Вывод программы:
    Код:
    lo:-10
    hi:9
    length:20
    Array:-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
    Array*10:-100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90
    Array+10:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    Ответ отправил: Micren, Бакалавр
    Ответ отправлен: 14.12.2009, 02:35

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

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


    Вопрос № 175235:

    Здраствуйте, скажите пожалуйста как написать программу которая бы удаляла из памяти заранее указанные процессы ? Ну проще говоря автоматизация удаления оных вручную из диспетчера задач. Скажу сразу я в программировании весьма и весьма слаб и прошу учесть это при ответах.

    Отправлен: 14.12.2009, 02:46
    Вопрос задал: Cyberstorm, 1-й класс
    Всего ответов: 3
    Страница вопроса »


    Отвечает vladisslav, 5-й класс :
    Здравствуйте, Cyberstorm!
    windows? Если да, то такая программа уже написана корпорацией майкрософт. Называется taskkill.
    Используется примерно так:
    taskkill [/s компьютер] [/u домен\пользователь [/p пароль]]] [/fi имя_фильтра] [/pid код_процесса]|[/im имя_образа] [/f][/t]
    Если нужно завершить процессы по имени, то вызывается так:
    taskkill /im:имя_процесса
    можно добавить /f если это не gui процессы, а например службы.
    Подробности по другим ключам можно узнать из справки taskkill /?
    Если нужно делать периодически, то можно поместить в планировщик.

    Ответ отправил: vladisslav, 5-й класс
    Ответ отправлен: 14.12.2009, 11:45

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 257710 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Dr_Andrew, Старший модератор :
    Здравствуйте, Cyberstorm!
    Linux? Если да, то в принципе подобные программы уже написаны. Утилита pidof возвращает pid процесса по имени запустившей программы (использование: pidof programme, где programme - имя программы). Утилита kill уничтожает процесс (использование: kill number, где number - номер pid). Всё это можно объединить в одном сценарии Bourne Shell (простейший пример):

    Код:

    #! /bin/bash
    kill $(pidof programme)


    Сохраните сценарий в файл, сделайте его исполняемым командой chmod 555 и запустите. Всё! Если в Вашем дистрибутиве Linux используется другая командная оболочка, нежели bash, просто замените 1-ю строчку сценария на нужную.

    Ответ отправил: Dr_Andrew, Старший модератор
    Ответ отправлен: 14.12.2009, 12:48
    Казахстан, Алма-Ата
    Организация: Казахский научный центр карантинных и зоонозных инфекций
    Адрес сайта: Медицинские программы для Linux
    ICQ # 256452186

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 257712 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Лейла, 2-й класс :
    Здравствуйте, Cyberstorm.
    Самый простой вариант:
    WinExec("taskkill.exe /f /im program.exe", SW_HIDE);

    Ответ отправил: Лейла, 2-й класс
    Ответ отправлен: 18.12.2009, 14:43

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


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

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

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

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

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

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


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

    В избранное