Re[3]: Так что это за ходоки по собеседованиям?
От: Cadet  
Дата: 08.05.11 20:19
Оценка: +3
Здравствуйте, Безон, Вы писали:

Б>Почему?


Я например потому что просто отвык ручку в руках держать. В банке недавно договор заключал, так весь извелся подписи ставить и кодовые слова писать
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[8]: Так что это за ходоки по собеседованиям?
От: Cadet  
Дата: 08.05.11 20:23
Оценка: 1 (1) +1
Здравствуйте, cli, Вы писали:

cli>Точно, правильно будет sysenter/sysexit


И как жеж ты мог такое забыть? Плаваем батенька, плаваем, плохо знаем предмет
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[12]: Так что это за ходоки по собеседованиям?
От: мыщъх США http://nezumi-lab.org
Дата: 08.05.11 20:42
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, мыщъх, Вы писали:


М>>>>такое поведение деструктора еще хуже, чем return в середине функции. потому как код становится совсем неинтуитивным.


A>>>TempFile, AutoDeletableFile, всё интуитивно понятно


М>>temp файл можно и так создать через fopen. а тут речь идет о том, что перед выходом из функции требуется совершить некоторые действия, варьирующиеся в зависимости от изменичивой логики кода. это может быть все что угодно:


A>речь о том что по названию класса можно определить его поведение.

A>класс File не удаляет файл в деструкторе,
A>а класс TempFile — удаляет файл в деструкторе,
то есть для создания временных файлов нужен целый класс? а почему не метод CreateTempFile класса File? почему не CreateFile(,,,TEMP_FILE) ?!
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[15]: Практики?
От: neFormal Россия  
Дата: 08.05.11 21:04
Оценка:
Здравствуйте, 24, Вы писали:

F>>не только.. есть ещё небольшие редковстречаемые отличия..

24>Какие? Кроме того, что наследование для классов по-умолчанию приватное, а для сруктур публичное, и того, что в шаблонах вместо typename можно писать class, но нельзя struct (хотя это отличие ключевых слов, а не самих классов и структур).

например, возможность использовать инициализацию через `= {1,2,3}` вместо явного вызова конструктора.. но в новом стандарте афаик это будет..
ещё был какой-то нюанс при родословной наследования (class->struct->class) и (struct->class->struct), но сходу я не вспомнил и легко нагуглить не смог..
...coding for chaos...
Re[13]: Так что это за ходоки по собеседованиям?
От: Abyx Россия  
Дата: 08.05.11 21:10
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>то есть для создания временных файлов нужен целый класс? а почему не метод CreateTempFile класса File? почему не CreateFile(,,,TEMP_FILE) ?!


да, отдельный класс.
также можно сделать отдельную функцию CreateFile(,,,TEMP_FILE) которая будет возвращать объект типа File или TempFile в зависимости от параметра
возможно она для этого будет вызывать другую функцию — CreateTempFile(,,)

и это хорошо тем, что хотя классов, методов и функции много — каждый отвечает за что-то одно, по этому такой код проще понять и изменить
In Zen We Trust
Re[14]: Так что это за ходоки по собеседованиям?
От: мыщъх США http://nezumi-lab.org
Дата: 08.05.11 21:15
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, мыщъх, Вы писали:


М>>то есть для создания временных файлов нужен целый класс? а почему не метод CreateTempFile класса File? почему не CreateFile(,,,TEMP_FILE) ?!


A>да, отдельный класс.

и сколько всего вам потребуется классов с таким подходом?

A>также можно сделать отдельную функцию CreateFile(,,,TEMP_FILE) которая будет возвращать объект типа File или TempFile

объект в любом случае File, но внутри его есть флаг TEMP или не TEMP.


A>и это хорошо тем, что хотя классов, методов и функции много — каждый отвечает за что-то одно, по этому такой код проще понять и изменить

тогда нам нужны классы типа CreateReadOnlyFile
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[13]: Так что это за ходоки по собеседованиям?
От: dudkin  
Дата: 08.05.11 21:16
Оценка:
Здравствуйте, мыщъх, Вы писали:


D>>локальная структура с кастомным деструктором -- полностью удовлетворяет нуждам.

D>>То есть грубо говоря, если обычно у с++ников класс состоит из функций, то тут наоборот, функция раскручивается вокруг класса.
М>согласен. можно создать класс-пустышку и запихнуть в его деструктор все действия, которые мы хотим выполнить по выходу из функции (это если я правильно понял вашу идею, в плюсах, увы, не силен).


ууу а не подскажете чем struct отличается от class в С++

Re[16]: Практики?
От: RedUser Россия  
Дата: 08.05.11 21:32
Оценка:
F>например, возможность использовать инициализацию через `= {1,2,3}` вместо явного вызова конструктора.. но в новом стандарте афаик это будет..
F>ещё был какой-то нюанс при родословной наследования (class->struct->class) и (struct->class->struct), но сходу я не вспомнил и легко нагуглить не смог..

Да вроде и для классов можно:
$ cat class.cc
struct S {
    int a;
    int b;
};

class C {
public:
    int a;
    int b;
};

int main()
{
    S s = {1, 2};
    C c = {3, 4};
    return 0;
}
$ make class
g++     class.cc   -o class
$ g++ --version
g++ (Debian 4.3.2-1.1) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Re[16]: Практики?
От: 24  
Дата: 08.05.11 21:35
Оценка:
Здравствуйте, neFormal, Вы писали:

F>например, возможность использовать инициализацию через `= {1,2,3}` вместо явного вызова конструктора.. но в новом стандарте афаик это будет..


Это компилится в вижуал студии, gcc, и comeau (с отключенными расширениями c++0x):
#include <iostream>

class Test {
public:
    int a;
    int b;
};

int main() {
    Test t = {2, 9};
    
    std::cout << t.a << " " << t.b << std::endl;
    
    return 0;
}


F>ещё был какой-то нюанс при родословной наследования (class->struct->class) и (struct->class->struct), но сходу я не вспомнил и легко нагуглить не смог..

Так делать — изврат, но уровень доступа и наследования, если не ошибаюсь, берётся из того, что объявляется — если класс наследуется от структуры — то как для класса, если структура наследуется от класса — как для структуры.
боже, какой примитив
От: rm822 Россия  
Дата: 08.05.11 21:38
Оценка:
мне вас даже немножко жалко
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Так что это за ходоки по собеседованиям?
От: alexeiz  
Дата: 08.05.11 21:39
Оценка: 10 (1)
Здравствуйте, ilvi, Вы писали:

I>Люди которые работают на работе, а вне работы удиляют время семье? Вы попробуйте в рабочее время работать и сами увидите как в течении пары месяцев вся не нужная для работы информация у вас уйдет в дальние закоулки сознаия, откуда ее будет очень тяжело вытащить.


Поэтому нужно всегда готовиться к собеседованию, даже если ты супер спец.

I>Про детские вопросы по computer science из недавно услышаных вопросов с собеседования:

I>1. Вы знаете как из бинарного представления целого положительного числа Х получить бинарное представление -Х?

Это на самом деле отличный вопрос. Если вам нужны люди для написания системных вещей, то лучше вопроса просто нет для отделения практиков от теоретиков.

I>2. А теперь усложняем вопрос. А зачем вам это знать, вы это где то в работе использовали?


Пожалуйста: когда смотришь в отладчике на огромное неотрицательное число, никаких мыслей не возникает?

I>Ну и писать код на бумаге, как многие отметили, это то еще издевательство. Купите хоть ноутбку простой для собеседований.


И код на бумаге тоже надо уметь писать. Да что там много кода писать попросят? Максимум строк 10 — больше и не влезет. Зато сразу видно как у человека построен процесс мышления.
Re[17]: Практики?
От: neFormal Россия  
Дата: 08.05.11 21:41
Оценка: 1 (1)
Здравствуйте, RedUser, Вы писали:

RU>Да вроде и для классов можно:


увы:
class Bar{
 int a;
 int b;
};
Bar b = {1,2}

RU>
test.cpp:36: ошибка: in C++98 ‘b’ must be initialized by constructor, not by ‘{...}’
test.cpp:36: предупреждение: extended initializer lists only available with -std=c++0x or -std=gnu++0x
RU>

© g++ (Gentoo 4.4.5 p1.2, pie-0.4.5) 4.4.5
...coding for chaos...
Re[17]: Практики?
От: neFormal Россия  
Дата: 08.05.11 21:46
Оценка:
Здравствуйте, 24, Вы писали:

F>>например, возможность использовать инициализацию через `= {1,2,3}` вместо явного вызова конструктора.. но в новом стандарте афаик это будет..

24>Это компилится в gcc

пруф ми
Автор: neFormal
Дата: 09.05.11


F>>ещё был какой-то нюанс при родословной наследования (class->struct->class) и (struct->class->struct), но сходу я не вспомнил и легко нагуглить не смог..

24>Так делать — изврат,

с фига ли, если между ними разница только в уровнях доступа?.
что за типовой шовинизм, структуры тоже классы!!!11
...coding for chaos...
Re[13]: Так что это за ходоки по собеседованиям?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.11 22:10
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Здравствуйте, Abyx, Вы писали:


A>>Здравствуйте, мыщъх, Вы писали:


М>>>>>такое поведение деструктора еще хуже, чем return в середине функции. потому как код становится совсем неинтуитивным.


A>>>>TempFile, AutoDeletableFile, всё интуитивно понятно


М>>>temp файл можно и так создать через fopen. а тут речь идет о том, что перед выходом из функции требуется совершить некоторые действия, варьирующиеся в зависимости от изменичивой логики кода. это может быть все что угодно:


A>>речь о том что по названию класса можно определить его поведение.

A>>класс File не удаляет файл в деструкторе,
A>>а класс TempFile — удаляет файл в деструкторе,
М>то есть для создания временных файлов нужен целый класс? а почему не метод CreateTempFile класса File? почему не CreateFile(,,,TEMP_FILE) ?!

Потому что в таком случае посмотрев на созданный файл ты не узнаешь что он временный.
Именно типы позволяют в программах передавать больше информации, чем содержится в самом тексте.
В твоем случае File.CreateTempFile должен возвращать TempFile, который будет наследником File.
Re[15]: Так что это за ходоки по собеседованиям?
От: Abyx Россия  
Дата: 08.05.11 22:25
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>и сколько всего вам потребуется классов с таким подходом?

много

A>>также можно сделать отдельную функцию CreateFile(,,,TEMP_FILE) которая будет возвращать объект типа File или TempFile

М>объект в любом случае File, но внутри его есть флаг TEMP или не TEMP.
разумеется можно и так. но не нужно.
это trade-off между количеством классов\методов и количеством ветвлений\количеством задач которые решает класс
т.е. 30 тривиальных кусков кода против 5 сложных функций в которых засунуто дофига функциональности.

разумеется не надо ударяться в крайности, но общая тенденция должна быть именно такова.

также надо не забывать, что вместо того чтобы самому сделать класс, можно взять подходящий шаблонный класс из стандартной библиотеки, и настроить под свои нужды
#include <memory>
 
FILE* test(const char* name)
{
   typedef std::unique_ptr<FILE, void(*)(FILE*)> auto_file;
 
   auto_file file(fopen(name, "wb"), fclose);
 
   if(fputs("text", file.get()) == EOF)
      return NULL;

   fseek(file.get(), 0, SEEK_SET);

   return file.release();
}
In Zen We Trust
Re[14]: Так что это за ходоки по собеседованиям?
От: мыщъх США http://nezumi-lab.org
Дата: 08.05.11 22:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, мыщъх, Вы писали:


A>>>речь о том что по названию класса можно определить его поведение.

A>>>класс File не удаляет файл в деструкторе,
A>>>а класс TempFile — удаляет файл в деструкторе,
М>>то есть для создания временных файлов нужен целый класс? а почему не метод CreateTempFile класса File? почему не CreateFile(,,,TEMP_FILE) ?!

G>Потому что в таком случае посмотрев на созданный файл ты не узнаешь что он временный.

точно так же, посмотрев на TempFile я не узнаю является ли он SHORT_LIVED или нет. ведь существует две категории временных файлов -- файлы, которые нужно держать в памяти и по возможности не сбрасывать на диск, и файлы, сбрасываемые на диск как можно чаще.

G>Именно типы позволяют в программах передавать больше информации, чем содержится в самом тексте.

G>В твоем случае File.CreateTempFile должен возвращать TempFile, который будет наследником File.
да не будет он возвращать TempFile. 'temp' это один из очень многих атрибутов объекта File. более того, деструктору глубоко начхать какой файл -- временный или нет. он вызывает close, не вникая в техническе детали.

CreateTempFile это обертка над File.Create|Open. в принципе, я согласен, что удобнее иметь File.CreateTempFile, чем File.CreateFile('имя_по_фиг_для_временных_файлов_его_выберет_сама функця', TEMP_FILE), но создавать производный класс... интересно, в какой библиотеке (из числа популярных) разработчики применили такое решение?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[16]: Так что это за ходоки по собеседованиям?
От: мыщъх США http://nezumi-lab.org
Дата: 08.05.11 22:58
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, мыщъх, Вы писали:


М>>и сколько всего вам потребуется классов с таким подходом?

A>много

A>>>также можно сделать отдельную функцию CreateFile(,,,TEMP_FILE) которая будет возвращать объект типа File или TempFile

М>>объект в любом случае File, но внутри его есть флаг TEMP или не TEMP.
A>разумеется можно и так. но не нужно.
A>это trade-off между количеством классов\методов и количеством ветвлений\количеством задач которые решает класс
A>т.е. 30 тривиальных кусков кода против 5 сложных функций в которых засунуто дофига функциональности.
а мне казалось, что нужно при возможности абстрагироваться от деталей реализации. и концепция файла позволяет использовать унифицированный набор методов для решения очень разных задач. вместо класса GenerateRandomNumber можно открыть файл /dev/rand и читать его в свое удовольствие. а вместо Read|WriteProcessMemory можно юзать FileRead/FileWrite.

вы стремитесь увеличить кол-во классов и методов, а я стремлюсь их сократить.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[15]: Так что это за ходоки по собеседованиям?
От: dudkin  
Дата: 08.05.11 23:00
Оценка: +1
Здравствуйте, мыщъх, Вы писали:

М>CreateTempFile это обертка над File.Create|Open. в принципе, я согласен, что удобнее иметь File.CreateTempFile, чем File.CreateFile('имя_по_фиг_для_временных_файлов_его_выберет_сама функця', TEMP_FILE), но создавать производный класс... интересно, в какой библиотеке (из числа популярных) разработчики применили такое решение?


для вас класс похоже означает что то типа "стремительного домкрата". большое. неповоротливое.
это бывает у очень неопытных программистов которые пугаются слов класс, виртуальная функция, виртуальный деструктор.
если отойти от временного файла и рассмотреть задачу более общую откройте на досуге MFC\ATL и сделайте поиск (АС например) по ключевому слову m_bAutoDelete
Re[16]: Так что это за ходоки по собеседованиям?
От: мыщъх США http://nezumi-lab.org
Дата: 08.05.11 23:25
Оценка:
Здравствуйте, dudkin, Вы писали:

D>Здравствуйте, мыщъх, Вы писали:


М>>CreateTempFile это обертка над File.Create|Open. в принципе, я согласен, что удобнее иметь File.CreateTempFile, чем File.CreateFile('имя_по_фиг_для_временных_файлов_его_выберет_сама функця', TEMP_FILE), но создавать производный класс... интересно, в какой библиотеке (из числа популярных) разработчики применили такое решение?


D>для вас класс похоже означает что то типа "стремительного домкрата". большое. неповоротливое.

тут не за скорость разговор идет, а за уровни абстракции. временный файл отличается всего лишь одним атрибутом. причем, этот атрибут можно (в общем случае) менять в течении жизни объекта, если он реализован как атрибут.

D>это бывает у очень неопытных программистов которые пугаются слов класс, виртуальная функция, виртуальный деструктор.

класс -- это некая сущность. согласны? тогда вопрос -- зачем плодить сущности на ровном месте?

D>если отойти от временного файла и рассмотреть задачу более общую откройте на досуге MFC\ATL

D>и сделайте поиск (АС например) по ключевому слову m_bAutoDelete
сделал. нашел пару классов где он используется. ну и что? это как раз тот путь, о котором я говорю. это атрибут, а не производный класс. так что очко в мою пользу. покажите мне библиотеку, где TempFile реализован как класс.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[8]: Практики?
От: alexeiz  
Дата: 08.05.11 23:32
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, __kot2, Вы писали:


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

CC>Давай сравним скорость выполнения refactor rename c VIX и со "скоростью печати"

Давно было дело, один раз нужно было поправить какой-то чужой код. Там один гиганский switch, мне быстро надоело по нему туда-сюда бегать. Переписывать это дело очень не хотелось тоже. Достал какой-то триальный add-on для рефакторинга C++ в visual studio. И каждый case выделил в отдельную функцию. Коллеги оценили! Они не знали, как я это сделал . С тех пор триал давно истек, а название add-on'а я забыл. Теперь набираю код в vim'е. Консольном.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.