Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что нужно работодателю? 
:(
    Опции темы
Yurik
Дата 20.7.2005, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 18.6.2005

Репутация: нет
Всего: нет



Я шарю в С++ билдере, в С#.
Чего бы мне еще изучить, шоб работу найти?
Может win api?
Стоит ли учить MFC? (билдер-то я знаю)

PM MAIL   Вверх
mclight
Дата 20.7.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



смотря кого ты найдешь.если какого-нить лоха то достаточно знать блокнот.
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
Yurik
Дата 20.7.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 18.6.2005

Репутация: нет
Всего: нет



ну допустим я найду среднестатистического московского работодателя в области программирования.


Народ, кто работает? Расскажите какие знания Вы используете в работе......

Это сообщение отредактировал(а) Yurik - 20.7.2005, 23:23
PM MAIL   Вверх
cardinal
Дата 20.7.2005, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Спросит он тебя, что общего в билдере и MFC? smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
S.A.P.
Дата 20.7.2005, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Yurik сначала ознакомься с предлагаемыми вакансиями. Если посчитаешь себя удовлетворяющим требования, то флаг те в руки smile .
PM MAIL   Вверх
mclight
Дата 21.7.2005, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



Не место красит Чела, а Чел Место!
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
chaos
Дата 21.7.2005, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



у меня на последнем собеседовании спрашивали C/C++, STL, БД

Это сообщение отредактировал(а) chaos - 21.7.2005, 06:21
PM WWW   Вверх
знаЯ тех кто "шарит"
Дата 21.7.2005, 07:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Я шарю в С++ билдере, в С#.
Чего бы мне еще изучить, шоб работу найти?
Может win api?
Стоит ли учить MFC? (билдер-то я знаю)
, эх, слушайте, а много тут народу кто может похвастать такими знаниями????


 ! 
 
Матерные выражения удалены. В следующий раз будет бан по IP. Chipset


Это сообщение отредактировал(а) chipset - 21.7.2005, 08:56
  Вверх
знаЯ тех кто "шарит"
Дата 21.7.2005, 11:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...мат был оккуратно закрыт ..., хотябы слова чтоль изменил бы, а то весь смысл потерялся, чьл такие чуваки не нужны ВАЩЕ
  Вверх
Stajor
Дата 21.7.2005, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.7.2005

Репутация: нет
Всего: нет



Цитата(chaos @ 21.7.2005, 06:20)
у меня на последнем собеседовании спрашивали C/C++, STL, БД

во во, то же самое, а на предыдущем месте просто взяли со скамейки запасных (после диплома).
Все зависит от того кто работадателю нежен и для чего. smile
PM MAIL   Вверх
ManiaK
Дата 21.7.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата
эх, слушайте, а много тут народу кто может похвастать такими знаниями????

Не так уж и мало smile Процентов 30-40% я думаю наберётся.
PM MAIL WWW   Вверх
знаЯ тех кто "шарит"
Дата 21.7.2005, 12:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Я шарю в С++ билдере, в С#.
,ManiaK, ты можешь сказать что ты ШАРИШъ?

Такими словами ни один проф. не оперирует...Простите конечно но это моё мнение...Обычно те кто ШАРЯТ, не знают нифига ( chipset, это не мат).

Простите за резкие высказывания, просто в компании в которой я работаю был недавно набор, ну и наняли чувака который "шарит" в VCL...
  Вверх
ManiaK
Дата 21.7.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата
Такими словами ни один проф. не оперирует...

Это что? Аля "у одного моего знакомого все знакомые - уроды"??
Не вижу смысла в твоих высказываниях. Люди бывают разные, но мы здесь не их обсуждаем.
PM MAIL WWW   Вверх
chaos
Дата 21.7.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(chaos @ 21.7.2005, 06:20)
у меня на последнем собеседовании спрашивали C/C++, STL, БД

а самое че интересное по C/C++ тестировали тестами с www.brainbench.com

PM WWW   Вверх
ManiaK
Дата 21.7.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



chaos Гы. А я к ним как-то несерьёзно отношусь, может зря?..
PM MAIL WWW   Вверх
Vyacheslav
Дата 21.7.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Мне тут пришлось интервьюировать кандидатов по телефону. Вопросы самые простые. Результаты плачевные, хотя судя по резюме люди участвовали в солидных проектах.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 21.7.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(ManiaK @ 21.7.2005, 12:14)
chaos Гы. А я к ним как-то несерьёзно отношусь, может зря?..

ну не знаю smile
самое что интересное, в результате они мне сказали что: Вы молодой человек хорошо владеете С, но не как ни С++ smile (а я все время думал что хорошо знаю С++) возникли проблемы с STL, шаблонами и наследованием. они мне дали месяц на подготовку. и после этого я в плотную подсел на С++ smile
кстати кантора та была всем известная по сайту naumen.ru(у них по моему есть сайт с литературой по программированию)


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

Люблю собеседования на них узнаешь новое smile

Это сообщение отредактировал(а) chaos - 21.7.2005, 12:32
PM WWW   Вверх
Vyacheslav
Дата 21.7.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата
Простите за резкие высказывания, просто в компании в которой я работаю был недавно набор, ну и наняли чувака который "шарит" в VCL...

И что. С каких это пор знание VCL стало эквивалентом незнания С++. Я могу сказать, что используя в полной мере VCL можно значительно глубже освоить и понять принципы ООП, чем при использовании той же MFC. Потому как, хотя и на нее наложилось ее дельфийское происхождение, но с точеи зрения ООП она построена более правильно.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 21.7.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(chaos @ 21.7.2005, 13:21)
кстати кантора та была всем известная по сайту naumen.ru(у них по моему есть сайт с литературой по программированию)

Тогды ясно smile
Добавлено @ 12:30
Цитата(Vyacheslav @ 21.7.2005, 13:20)
Вопросы самые простые.

А примеры вопросов можно? smile
PM MAIL WWW   Вверх
chaos
Дата 21.7.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(ManiaK @ 21.7.2005, 12:29)
Цитата(chaos @ 21.7.2005, )
кстати кантора та была всем известная по сайту naumen.ru(у них по моему есть сайт с литературой по программированию)

Тогды ясно smile
Добавлено @ 12:30
Цитата(Vyacheslav @ 21.7.2005, 13:20)
Вопросы самые простые.

А примеры вопросов можно? smile

помню только один smile (тк волновался сильно), а нет два
1) отсортировать массив в одну строчку
мой ответ: я ляпнул qsort(но все то знают что в одну строчку не получится тк надо еще функйию писать для сравнения), а они от меня ждали sort STL'евский
2) m/[0-9]+/ что попадает под данный шаблон
Ну с этим я справился быстро так как шаблон детский, да и перл я очень люблю


ой блин, про примеры это же не мне smile

Это сообщение отредактировал(а) chaos - 21.7.2005, 12:36
PM WWW   Вверх
знаЯ тех кто "шарит"
Дата 21.7.2005, 21:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
И что. С каких это пор знание VCL стало эквивалентом незнания С++. Я могу сказать, что используя в полной мере VCL можно значительно глубже освоить и понять принципы ООП, чем при использовании той же MFC. Потому как, хотя и на нее наложилось ее дельфийское происхождение, но с точеи зрения ООП она построена более правильно.
, где я это писал?

Просто пиходят человек и говорит: я знаю ООP & OOD. С++ это круто, я пишу "крутые проги" в builder - е, и "шарю" просто во всем.

На вопрос как он пишет "проги", человек отвечает: ну на кнопку click, появляется обработчик, я там код и т д

Вопрос: про множественное наследование и проблемы с ним связанные, кто такой Буч, что такое UML, повегли в ужас;
  Вверх
знаЯ тех кто "шарит"
Дата 21.7.2005, 21:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ещё ещё: назовите три кита ООП? это ваще смерть.....а не вопрос....
  Вверх
chaos
Дата 22.7.2005, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



инкапсуляция, полиморфизм, наследование - эти что ли? smile
PM WWW   Вверх
Vyacheslav
Дата 22.7.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код

char* pchar = new char[1000000000000];

if (!pchar) {
     cout << "bad alloc" << endl; 
} 


Что здесь некорректно и что надо сделать чтобы код стал корректным?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.7.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Vyacheslav наскока понимаю число 1000000000000 выходит за пределы size_t, потому нужно использовать либо другой аллокатор, либо выделять блочно.
PM MAIL WWW   Вверх
Mayk
Дата 22.7.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Ну,так наверное:
Код

char* pchar;
try{
pchar = new char[1000000000000]; //<-- integer overflow здесь случайно или нет?
}catch(bad_alloc){
     cerr << "bad alloc" << endl; 
} 



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 22.7.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



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


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Mayk
Дата 22.7.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Vyacheslav @ 22.7.2005, 11:16)
Код написан как есть. Что в нем в независимости от числа бессмысленно

Стандартный new не возвращает NULL в случае ошибки. Он кидает исключение, которое если не перехватить, завершит приложение
Цитата(Vyacheslav @ 22.7.2005, 11:16)
и что нужно сделать не добавляя практически ничего что бы код стал осмысленным.

smile Запретить кидать исключение
Код

pchar = new(nothrow) char[1000000000000];


Это сообщение отредактировал(а) Mayk - 22.7.2005, 10:21


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.7.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Могу предложить только выводить в поток cerr...
Любопытный вопросик smile
PM MAIL WWW   Вверх
Vyacheslav
Дата 22.7.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Mayk
Ответ принят smile


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.7.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



МДа smile
PM MAIL WWW   Вверх
Mayk
Дата 22.7.2005, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Vyacheslav
Давай еще вопросы smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



а я бы вообще сделал
Код

#include <iostream.h>
#include <new.h>

int MyHandler(size_t n)
{
    cout << "А нафига ж тебе столько памяти?" << endl;
    return 0;
}

int main(int argc, char* argv[])
{
    _PNH old_handler = _set_new_handler( MyHandler );

    char *s = new char[10000000000];
    
    _set_new_handler(old_handler);
    return 0;
}


smile

Это сообщение отредактировал(а) chaos - 22.7.2005, 10:32
PM WWW   Вверх
Vyacheslav
Дата 22.7.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



По ООП: есть два класса А и B. Нужен третий класс С, обладающий свойствами как одного так и другого. Задачу можно решить используя наследование или агрегацию. На конечный результат не повлияет. Что использовать предпочтительнее и почему?
Добавлено @ 10:38
chaos
Ты поменял МОЙ код, тем самым проявив ко мне неуважение как интервьюеру smile. А я ведь настоятельно просил.

Насчет числа, я конечно зря написал от балды. Просто посчитал, что это несущественно. Лучше было поставить переменную


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(Vyacheslav @ 22.7.2005, 10:33)
Добавлено @ 10:38
chaos
Ты поменял МОЙ код, тем самым проявив ко мне неуважение к интервьюеру smile. А я ведь настоятельно просил.

Насчет числа, я конечно зря написал от балды. Просто посчитал, что это несущественно. Лучше было поставить переменную

извени! это я так просто ради смеху написал smile
PM WWW   Вверх
Mayk
Дата 22.7.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Vyacheslav @ 22.7.2005, 11:33)
По ООП: есть два класса А и B. Нужен третий класс С, обладающий свойствами как одного так и другого. Задачу можно решить используя наследование или агрегацию. На конечный результат не повлияет. Что использовать предпочтительнее и почему?

Не уверен, но кажется наследование. Множественное. Исхожу из расчётов, что так писать короче:
Код

class C: public A, public B{}



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 22.7.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код


class A {
public:
   func() { cout << "class A" << endl;}
};

class B : public A{
public:
    func() { cout << "class B" << endl;}
};

  A a;

  ((B*)&a)->func();


Результат?

Добавлено @ 10:52
Mayk
При проектировании систем не всегда исходят, из того что короче. Я бы за ответ поставил минус.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
S.A.P.
Дата 22.7.2005, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Не понял... Разве Mayk не правильно записал?
PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код


class A {
public:
  A(){vfunc(); func();}
   virtual vfunc() { cout << "class A" << endl;}
   func() { cout << "class A" << endl;}

};

class B : public A{
public:
   B():A(){ vfunc(); func();}
    vfunc() { cout << "class B" << endl;}
    func() { cout << "class B" << endl;}

};

B b;


Результат?



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Mayk
Дата 22.7.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Vyacheslav @ 22.7.2005, 11:50)

При проектировании систем не всегда исходят, из того что короче. Я бы за ответ поставил минус.

Ладно, потом скажешь правильный ответ?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



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

Это сообщение отредактировал(а) chaos - 22.7.2005, 11:06
PM WWW   Вверх
S.A.P.
Дата 22.7.2005, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Цитата(Vyacheslav @ 22.7.2005, 10:57)
Результат?

там вроде выйдет
A
A
B
B

да? smile

PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Perchilla @ 22.7.2005, 10:56)
Не понял... Разве Mayk не правильно записал?

Если для получения конечного результата можно применить либо наследование, либо агрегацию, то предпочтительнее выбрать агрегацию, хотя это будет более геморойный для кодировщика путь. При проектировании системы нужно исходить из того, что бы взаимосвязь между компонентами системы( сцепление) была как можно слабее. Агрегация является более слабой связью по сравнению с наследованием. Наследование в данном случае надо применять, если требуется, что бы экземпляр класса С мог вести себя и как экземпляр класса А и как класса B( при решении задачи будет использоваться полиморфизм как для А так и для B).
Что самое интересное, если я бы привел конкретный пример, то получил бы правильный ответ: например есть Человек и есть Адрес. Нужен Человек_с_Адресом. Если применить наследование, то задача будет также решена, но в этом случае мы получим скорее ЧеловекоАдрес


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



но все же я бы выбрал АГРЕГИРОВАНИЕ, тк я наверное потом если надо могу перейти в наследованию


Добавлено @ 11:12
могу немного повториться или когонить повторить

Если нужно сделать несколько объектов, которые различаются несущественно и имеют массу общего, то хорошим выбором может быть использование агрегирования свойств и изменения необходимых функций с учетом их состояния. Если архитектура программы по своему строению использует массу объектов, которые видны этой архитектуре совершенно безотносительно свойств, которыми они различаются, и методы, которыми эти объекты различаются, существенны, то скорее всего следует выбрать путь наследования.
PM WWW   Вверх
Vyacheslav
Дата 22.7.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код

class A {

  int a;
  int b;
  int c;
public:
  A(): c(5), b(c + 1) , a(c+b) { cout << a << endl << b << c << endl;  }
};
A a;

Результат?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



а я знаю но не скажу smile
Добавлено @ 11:26
могу только подсказать что в результате ЛАЖА
PM WWW   Вверх
Vyacheslav
Дата 22.7.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Похулиганим немного

Код


class A {
public:
  ~A(){ throw 1;}

};


try {
   A a;
   throw 2;
}
catch(int i) 
{
     cout << i << endl;
}


Добавлено @ 11:38
Что будет?
Код


class A {
public:
  ~A()throw(){ throw 1;} 

};

try {
   A a;
}
catch(int i) 
{
     cout << i << endl;
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



во втором случае то понятно что будет 1, а вот первый не понимаю smile
PM WWW   Вверх
Vyacheslav
Дата 22.7.2005, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



chaos
Неправильно



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Mayk
Дата 22.7.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Во-втором завершается в деструкторе, так как он не передает исключений?
Добавлено @ 11:44
А в первом связано с тем, что исключение происходит в раскрутке стека?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
_hunter
Дата 22.7.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



в первом программу система закроет -- два одновременных исключения а во втором просто unhandled exception. т.е. cout' ов ни там ни там не будет


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vyacheslav
Дата 22.7.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



_hunter
Совершенно верно.
В принципе в первом случае тоже может быть вызван unexpected(), но это стандартом неопределено
Второй случай четко оговаривается стандартом см 15.4 8


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.7.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Ну как всегда: всё веселуху пропустил smile
А ещё вопросы будут?..
PM MAIL WWW   Вверх
Vyacheslav
Дата 22.7.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Orlan
Дата 22.7.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Vyacheslav @ 22.7.2005, 10:33)
По ООП: есть два класса А и B. Нужен третий класс С, обладающий  свойствами как одного так и другого. Задачу можно решить используя наследование или агрегацию. На конечный результат не повлияет. Что использовать предпочтительнее и почему?

Зависит от обязанностей класса С. Если клиент должен вызвать функции классов А и В через С, то лучше наследование. Если класс С использует функции А и В, не предоставляя пользователю к ним доступа, то лучше агрегация; иначе класс С будет только делегировать вызовы (middle man). (Пользователь здесь код, который работает с классом С)
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Ну и так ради развития
Код

class A {
protected:
  void func();
};

class B : public  A {
public:
//что написать здесь
};

Как в классе B сделать func public, не перекрывая ее.
то есть способ
Код

public:
void func() { A::func();}

не предлагать.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.7.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Vyacheslav @ 22.7.2005, 14:37)
http://forum.vingrad.ru/index.php?showtopi...ndpost&p=474143

Здесь должно быть на экране "class B" вроде.
PM MAIL WWW   Вверх
Orlan
Дата 22.7.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Vyacheslav @ 22.7.2005, 10:50)
Код


class A {
public:
   func() { cout << "class A" << endl;}
};

class B : public A{
public:
    func() { cout << "class B" << endl;}
};

  A a;

  ((B*)&a)->func();


Результат?

Access violation.
Функция A::func() не виртуальная и все зависит от того какой мусор будет лежать после указателя эту функцию в таблице виртуальных функция класса А
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



ManiaK
Надеюсь ответ был получен в результате анализа кода, а прогона smile ?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
chaos
Дата 22.7.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата

class A {

  int a;
  int b;
  int c;
public:
  A(): c(5), b(c + 1) , a(c+b) { cout << a << endl << b << c << endl;  }
};
A a;



отвечаю smile
результат не определен, тк первым инициализируется член а членами б и с каторые еще не инициализированы

Это сообщение отредактировал(а) chaos - 22.7.2005, 13:51
PM WWW   Вверх
ManiaK
Дата 22.7.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Vyacheslav @ 22.7.2005, 14:49)
Надеюсь ответ был получен в результате анализа кода, а прогона  ?

smile Обижаешь!..

Цитата(chaos @ 22.7.2005, 14:50)
результат не определен, тк первым инициализируется член а членами б и с каторые еще не инициализированы

Согласен. Переменные будут инициализироваться в порядке объявления.
PM MAIL WWW   Вверх
Orlan
Дата 22.7.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Vyacheslav @ 22.7.2005, 11:21)
Код

class A {

  int a;
  int b;
  int c;
public:
  A(): c(5), b(c + 1) , a(c+b) { cout << a << endl << b << c << endl;  }
};
A a;

Результат?


???????????
???????????5

? - число, зависящие от компилятора (мусор)
a и b инициализируются мусором

Это сообщение отредактировал(а) Orlan - 22.7.2005, 13:55
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
ManiaK
Дата 22.7.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата
http://forum.vingrad.ru/index.php?showtopic=59176&view=findpost&p=474337

Вот это сложно. Не друзей ли там звать? smile
PM MAIL WWW   Вверх
Vyacheslav
Дата 22.7.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Orlan @ 22.7.2005, 13:48)
Access violation.
Функция A::func() не виртуальная и все зависит от того какой мусор будет лежать после указателя эту функцию в таблице виртуальных функция класса А

Ответ отрицательный. По-скольку метод не виртуальный, будет вызван метод класса, которым на момент вызвова представлен объект. В данном случае это класс B. Access violation возможен, если внутри функции будут связанные с модификацией членов класса B. Но в данном примере этого нет. Естественно пример с точки зрения норм не корректен, но здесь проверятся понимание различий между виртуальными и обычными методами.

Добавлено @ 14:02
Цитата(Orlan @ 22.7.2005, 13:54)
???????????
???????????5

? - число, зависящие от компилятора (мусор)
a и b инициализируются мусором

Это понятно. Прогнать я тоже могу. Почему это происходит?



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Orlan
Дата 22.7.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Vyacheslav @ 22.7.2005, 14:00)

Цитата(Orlan @ 22.7.2005, )

???????????
???????????5

? - число, зависящие от компилятора (мусор)
a и b инициализируются мусором

Это понятно. Прогнать я тоже могу. Почему это происходит?

Потому что был создан объект int(5), но не было произведено присваивание полю с, которое происходит перед входом в тело конструктора. Окончательное конструирование происходит когда созданы базовые классы и все переменный посчитаны для присваивания полей

Это сообщение отредактировал(а) Orlan - 22.7.2005, 14:09
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Orlan @ 22.7.2005, 14:08)
Потому что был создан объект int(5), но не было произведено присваивание полю с, которое происходит перед входом в тело конструктора. Окончательное конструирование происходит когда созданы базовые классы и все переменный посчитаны для присваивания полей

Ответ неверен. Порядок инициализации членов класса определяется не списком инициализации, а порядком их декларации в классе, то есть сначала должны были быть инициализированы a , b, а потом уж c. На момент инициализации а, в b и с лежал мусор. Соотвественно и а получил мусор. Аналогичная ситуация и для b.


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Orlan
Дата 22.7.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Vyacheslav @ 22.7.2005, 16:05)
Порядок инициализации членов класса определяется не списком инициализации, а порядком их декларации в классе, то есть сначала должны были быть инициализированы a , b, а потом уж c. На момент инициализации а,  в  b и с лежал мусор. Соотвественно и а  получил мусор. Аналогичная ситуация и для b.

Ни когда бы не рискнул надеятся на порядок декларации членов класса. Трудно поверить что такое может быть записано в стандарте С++.
А есть ли хорошие учебники/сайты, где описаны подобные тонкости С++ или надо штудировать стандарт?
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
Vyacheslav
Дата 22.7.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Orlan @ 22.7.2005, 16:56)
Ни когда бы не рискнул надеятся на порядок декларации членов класса. Трудно поверить что такое может быть записано в стандарте С++.

См 12.6.2 5
Цитата

... nonstatic data members shall be initilized in order they declared in the class definition(again regardless of the order of the mem-initializers)




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Дрон
Дата 22.7.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Вот поэтому я списком инициализации никогда не пользуюсь. Зачем лишний геморрой выдумывать? smile


--------------------
Да. Именно так.
PM   Вверх
Earnest
Дата 22.7.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата

class A {
protected:
  void func();
};

class B : public  A {
public:
//что написать здесь
};

Как в классе B сделать func public, не перекрывая ее.


Код

class B : public  A {
public:
   using A::func;
};



--------------------
...
PM   Вверх
Sleepman
Дата 22.7.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.1.2005
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
Вот поэтому я списком инициализации никогда не пользуюсь. Зачем лишний геморрой выдумывать?


Дрон, без этого способа невозможно инициализировать поля-константы, поля-ссылки и поля-объекты.
PM MAIL   Вверх
Mayk
Дата 23.7.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Что-то стало пусто. Чтобы совсем не скучать, вот вам две задачки: одна легкая, другая интересная.
1) Чем плох этот кот?
Код

int someFunc(int a)
{
    try{
        if(a<=0) throw invalid_argument("a must be positive");
        char* b  = new char[a];        
        if(a * a * 7 > 25){ 
             throw logic_error("some logic error");
        }    
   } catch (logic_error) {
        cerr << "logic error" << endl;
   } catch (invalid_argument) {
        cerr << "invalid argument" << endl;
   } catch (bad_alloc) {
        cerr << "memory error" << endl;
   }        
}


2) В программе очень часто используются числа Фибоначи, причем аргументы для функции, вычисляющей эти числа, известны на момент компиляции. Ваша задача - избавить программу от вызова ф-ции, вычисляющий эти числа в программе. То есть если был код
Код

int f6 = fibonaci(6);

где fibonaci - обычная ф-ция, то вы должны сделать
Код

int f6 = что-то-от-6.

Где что-то-от-6 не является ф-цией.
Решите задачу не вводя дополнительных переменных.
Решите задачу так, чтобы в коде
Код

int f6=что-то-от-6.
int f66=что-то-от-66

обе переменные инициализировались за одинаковое время.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Void
Дата 23.7.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Mayk
1-я задача.
1) Течет память. При пробросе std::logic_error b не будет освобожден. Решение: использовать смарт-пойнтер, например, std::auto_ptr.
2) Исключения invalid_argument не будет поймано надлежащим образом, потому что соотвествующий хэндлер идет после хэндлера std::logic_error, от которого он наследуется. Исключения желательно ловить по const-reference, а не by value - во избежание срезки или исключения в копикторе.

2-я задача.
Код

template <unsigned Num>
struct fibonacci {
    enum { N = fibonacci<Num - 1>::N + fibonacci<Num - 2>::N };
};

template <>
struct fibonacci<1> {
    enum { N = 1 };
};

template <>
struct fibonacci<0> {
    enum { N = 1 };
};

int f6 = fibonacci<6>::N;



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Mayk
Дата 23.7.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Void
Угу. smile




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 25.7.2005, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Earnest @ 22.7.2005, 20:03)
using A::func;

Махать!.. Век живи - век учись smile
PM MAIL WWW   Вверх
Mayk
  Дата 21.8.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Источник: http://www.gamedev.ru/forum/?action=showto...up=9&topic=1321
--- кусь ---

Damir Tenisheff



Приложение к нитке "Где найти специалистов: Базовый уровень знаний С++".
Непосредственно вопросы:
Итак, вопросы. Полагаю, что писать ответы к ним в этой конференции не требуется. Сразу оговорюсь, что я не претендую на авторство вопросов. Что-то придумал сам по результатам чтения исходников в своей команде, что-то взял с других тестов и книг. Это не все вопросы – я выбрал 10 наиболее показательных. Если интересно – могу привести остальные.




*** 1 ***
Запишите названия типов и прокомментируйте, что в данном случае константно
a) const char *
b) char const *
c) char * const

Классические ошибки:
- Второй вариант почти никто не знает.
- Первый и третий вариант путают постоянно.

Замечание:
Почему-то про int * говорят “указатель на int”, а про char * говорят не “указатель на char”, а «указатель на строку».
Я всё понимаю и это ошибкой не считаю, но это всё же неточность в простом задании.


*** 2 ***

Для типа T напишите объявление следующих методов
a) конструктора копирования
b) оператора присваивания
c) оператора проверки на равенство
d) оператора сложения

Классические ошибки:
- значения передают по значению, а не по ссылкам
- ссылки делают не константными
- проверка на равенство (если делается членом) не объявляется константным методом
- оператор сложения пытается возвращать ссылку

*** 3 ***

Напишите максимально безопасный макрос, возводящий в квадрат свой аргумент.
Прокомментируйте, какие могут неприятности при использовании данного макроса.

Классические ошибки:
#define sq(x) x*x
Занавес. И вариации на эту тему.

*** 4 ***
struct A { A(){ cout << "A"; } };
struct B { B(){ cout << "B"; } };
struct C { C(){ cout << "C"; } };
struct D { D(){ cout << "D"; } };
struct E : D { E(){ cout << "E"; } };

struct F : A, B {
C c;
D d;
E e;
F() : B(), A(),d(),c(),e() { cout << "F"; }
};

В каком порядке будут вызваны конструкторы классов при создании объекта типа F ?
Запишите, каким будет при этом вывод программы?

*** 5 ***

Что произойдет в результате выполнения следующего кода? В чем ошибка? Как ее исправить?

T *p = new T[10];
delete p;

Классические ошибки:
- Всё будет хорошо
- Удалится только первый элемент
- Удалится всё, но будет вызван деструктор только первого элемента

*** 6 ***

Что произойдет в результате выполнения следующего кода?
T *p = 0;
delete p;

Классические ошибки:
- Программа упадёт.

Замечание:
Я знаю, что для произвольного типа Т этот вопрос немного сложнее и надо спрашивать о том, не перегружен ли delete у типа Т. Но меня устроил бы простой ответ для POD-типов и пользовательских типов с неперегруженным delete.

*** 7 ***

Что означает запись:
class Foo {
void Bar( void ) const ;
};

Что известно о методе Bar класса Foo?

*** 8 ***

Приведите пример виртуального наследования (запишите иерархию классов) и поясните, как производится инициализация виртуального базового класса. В чем состоят отличия от инициализации в отсутствии виртуального наследования?

Классические ошибки:
- Мне всё время рисуют ОБЫЧНОЕ наследование от ОДНОГО базового класса, имеющего виртуальные функции!!!
- Если кто-то и знает о виртуальном наследовании (1 из 100) – ничего не знает об инициализации в этом случае.

*** 9 ***

В чем состоит потенциальная опасность данного кода:

long value;
…
value &= 0xFFFF;

Как он должен быть переписан, чтобы избежать проблем?

Классические ошибки:
- value &= (long) 0xFFFF;
Занавес.

*** 10 ***

Что делается в следующем примере?
Код

void send (int *to, int * from, int count) 
{ 
  int n = (count + 7) / 8; 
  switch ( count % 8) { 
    case 0:    do  {  *to++ = *from++; 
    case 7:          *to++ = *from++; 
    case 6:          *to++ = *from++; 
    case 5:          *to++ = *from++; 
    case 4:          *to++ = *from++; 
    case 3:          *to++ = *from++; 
    case 2:          *to++ = *from++; 
    case 1:          *to++ = *from++; 
      } while ( --n > 0 ); 
  } 
} 

Зачем кому-нибудь может понадобиться подобный код?
--- кусь ---

Это сообщение отредактировал(а) Mayk - 21.8.2005, 19:58


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 22.8.2005, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Последний пример я где-то уже встречал, интересно smile
PM MAIL WWW   Вверх
Chaos A.D.
Дата 22.8.2005, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

Репутация: 6
Всего: 7



Как я горд, что знаю про виртуальное наследование smile. На восемь вопросов ответил легко. А вот девятый - не знаю, что там. Может нулей добавить? Я только один раз в жизни использовал битовые маски, по этому, не знаю, что в этом примере не так. Последний пример взят из упражнения второй(или третьей) главы Евангилие от Страуструпа. Так же где-то видел в каких то исходниках. Было бы интересно узнать правильный ответ на последние два вопроса.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
ManiaK
Дата 22.8.2005, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Mayk @ 21.8.2005, 20:43)
Зачем кому-нибудь может понадобиться подобный код?

Насколько я понимаю хитрость такой пары switch-while в том, что в первом цикле выполнится пересылка только count%8 значений, а во всех остальных циклах (коих либо count/8 при count%8=0 либо count/8 +1 при count%8 != 0) - по восемь значений. Для чего данная конструкция необходимо ответить трудно, я не сталкивался с необходимостью такой записи.
PM MAIL WWW   Вверх
cardinal
Дата 22.8.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Мне кажется, что это просто побайтовое копирование (без какий-либо практической эффективности smile)...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Mayk
Дата 22.8.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(cardinal @ 22.8.2005, 13:40)
без какий-либо практической эффективности

Дыкть, это ж Разворачивание Цикла smile Красивый кот, ничего не скажешь.
Цитата(ManiaK @ 22.8.2005, 13:34)
я не сталкивался с необходимостью такой записи.

Угу, memcpy/std::copy рулят smile

Цитата(Chaos @ 22.8.2005, 12:43)
Было бы интересно узнать правильный ответ на последние два вопроса.

Мог бы и по ссылочке сходить. Ну да ладно.
Цитата(Chaos @ 22.8.2005, 12:43)
А вот девятый - не знаю, что там. Может нулей добавить?

Пересказываю ответ: если int не совпадает размером с long, то компилятор может перекастить 0xFFFF в 0xFFFFFFFF(если он считает int знаковым).
(ИМХО плохая задача. ИМХО слишком надуманная - где это видано, чтобы sizeof(int) был равен 16 битам?! Да никогда. Мы не в 20ом веке. Сейчас в 16 бит даже символ может не влезть).


Цитата(Chaos @ 22.8.2005, 12:43)
Я только один раз в жизни использовал битовые маски

smile а как же работа с флагами?


Кстати, а что сошло бы за безопасный макрос на третий вопрос? Ну кроме предполагаемого "я бы использовал inline ф-цию".
Не могу придумать ничего безопаснее
Код

#define sqr(typeof_x, x, resvar) typeof_x resvar=(x); resvar *= resvar;

Но это нельзя подставить в цикл for.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 22.8.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(Mayk @ 22.8.2005, 11:30)
#define sqr(typeof_x, x, resvar) typeof_x resvar=(x); resvar *= resvar;

Интересное решение, но ИМХО бесполезное smile

Без особых изврещение можно написать что-то вроде:
Код
#define sqr(x) ((x)*(x))

Хотя если x -- функция, то тоже не особо smile

Насчёт 9-го. Ну я бы написал
Код

value &= 0xFFFFL;

вроде так... давно на Сях не писал smile

А вот 10-е мне вооще не понятно. Цикл в switch? Надо дома попробовать smile


--------------------
Да. Именно так.
PM   Вверх
Chaos A.D.
Дата 22.8.2005, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

Репутация: 6
Всего: 7



Цитата(Mayk @ 22.8.2005, 10:30)
Цитата (Chaos A.D. @ 22.8.2005, 12:43)
Было бы интересно узнать правильный ответ на последние два вопроса. 

Мог бы и по ссылочке сходить. Ну да ладно.


Я сначала по ссылке пошел, а потом твой пост начал читать. Там ответа на первой странице в вопросом не дали, следующие дальше читать не стал...

Цитата(Mayk @ 22.8.2005, 10:30)
Цитата (Chaos A.D. @ 22.8.2005, 12:43)
Я только один раз в жизни использовал битовые маски

а как же работа с флагами?



Я для флагов их и использовал. В конце концов, сегодняшние компилеры достаточно умны, чтобы также эффективно работать с битовыми полями, как и с масками.

Кстати, а что есть "Разворачивание Цикла" aka "unrolling loop"?

Это сообщение отредактировал(а) Chaos A.D. - 22.8.2005, 15:31
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
Mayk
Дата 22.8.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Chaos @ 22.8.2005, 19:28)
Я сначала по ссылке пошел, а потом твой пост начал читать. Там ответа на первой странице в вопросом не дали, следующие дальше читать не стал

[offtop]и прально, нечего по другим форумам шататься(ответы там были где-то посредине)[/offtop]

Цитата(Chaos @ 22.8.2005, 19:28)
Кстати, а что есть "Разворачивание Цикла" aka "unrolling loop"?

Это когда цикл убирают для повышения быстродействия. То есть был
Код

for(int i=0; i!=4;++i) a[i]=i;

стал
Код

a[0]=0,a[1]=1,a[2]=2,a[3]=3;

Итог - увеличение скорости программы (не надо сравнивать i с 4 и инкриментировать i);
В 10ом примере развернули примерно такой цикл
Код

for(int i=0; i!=8; ++i) to[i]=src[i];


Довольно эффективное средство оптимизации, надо сказать.

Это сообщение отредактировал(а) Mayk - 22.8.2005, 21:09


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Mayk
Дата 30.8.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Вот еще одна задачка на сообразительность(уж коли начали задачки сюда скидывать, продолжу сию славную традицию).
Есть код
Код

#include <stdio.h>
#include <stdlib.h>

FILE* lastCreatedFile=NULL;

class File{
    protected:    FILE* f;
    
    public:
    File(){f=NULL;}
    File(const char* path, const char* mode){f=fopen(path, mode);    }
    ~File(){if(f) fclose(f);}
};

class OutTextFile : public File{
    public:
    OutTextFile() {}
        OutTextFile(const char* str) : File(str, "w"){}        
        void println(){fprintf(f,"\n");}
};

class LogFile : public OutTextFile{
    public:
    LogFile() : OutTextFile("log.txt"){};
};

void someStuff(){
    LogFile l;
    l.println();
}

int main(){
    someStuff();
    fprintf(lastCreatedFile, "hello world\n");
}

Вы должны сделать так, чтобы в файл log.txt была выведена строка hello world(то есть fprintf в теле main должен быть выполнен). Вы НЕ можете добавлять новые переменные. Вы НЕ можете изменять тела существующих функций/методов. Вы НЕ можете использовать препроцессор(это не интересно). Других ограничений нет smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Orlan
  Дата 30.8.2005, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 10.6.2004
Где: Киев

Репутация: нет
Всего: 1



Цитата(Mayk @ 30.8.2005, 17:34)
Вот еще одна задачка на сообразительность(уж коли начали задачки сюда скидывать, продолжу сию славную традицию).
Есть код

Вы должны сделать так, чтобы в файл log.txt была выведена строка hello world(то есть fprintf в теле main должен быть выполнен). Вы НЕ можете добавлять новые переменные. Вы НЕ можете изменять тела существующих функций/методов. Вы НЕ можете использовать препроцессор(это не интересно). Других ограничений нет smile

Другими словами у тебя валится прога при вызове someStuff(); и ты не знаеш почему? smile
--------------------
А вы знали, что терапевт - это 1024 гигапевта или 1048576 мегапевтов
PM MAIL   Вверх
Mayk
Дата 30.8.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Я знаю почему smile
Потому что здесь не дописан кусок кода. Вопрос - какой? smile
Добавлено @ 17:50
Да, кстати. Прога вываливается после someStuff ))
someStuff работает нормально.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 30.8.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Тут ИМХО не совсем корректно.
Я, например, могу вывести "hello world" и не из main, а то что он потом свалится меня не волнует smile
Ведь добавлять новые методы не запрещено? smile


--------------------
Да. Именно так.
PM   Вверх
Mayk
Дата 30.8.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Нет, надо вывести именно из main.
Цитата
Ведь добавлять новые методы не запрещено?

Запрещено изменять тела существующих ф-ций и добавлять переменные.

Для большей ясности - файл log.txt НЕ должен быть закрыт smile

Блин, не доглядел. Не надо было println делать - дырка )
Переопределять println в LogFile тоже нельзя. А то неинтересно.

Это сообщение отредактировал(а) Mayk - 30.8.2005, 18:05


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 30.8.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



ну взять да деструктор добавить в LogFile
а там сделать LastCreatedFile=f;
если бы он был виртуальным, но надо было бы добавить f=0;...


--------------------
qqq
PM WWW   Вверх
Mayk
Дата 30.8.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Точно, но это слишком элементарно. Хочу увидеть душераздирающее решение.
Добавлять ф-ции в существующие классы тоже нельзя.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 30.8.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Mayk
Блин, пока тебе PM писал условия уже два раза поменялись smile smile




--------------------
Да. Именно так.
PM   Вверх
Mayk
Дата 30.8.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(maxim1000 @ 30.8.2005, 22:06)
если бы он был виртуальным, но надо было бы добавить f=0;...

Кстати, деструктор file будет вызван )


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 30.8.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(Mayk @ 30.8.2005, 19:08)
Хочу увидеть душераздирающее решение.

Переопределить FILE, fopen, fclose, fprintf??? smile

Это сообщение отредактировал(а) Дрон - 30.8.2005, 18:13


--------------------
Да. Именно так.
PM   Вверх
Mayk
Дата 30.8.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



хмм. А как ты переопределишь fclose?





--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 30.8.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Кстати, деструктор file будет вызван

а... да... виртуальность тут не причем smile
ну тогда f=0 в любом случае, чтобы закончить с этим недушераздирающим решением smile


--------------------
qqq
PM WWW   Вверх
maxim1000
Дата 30.8.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
тела существующих функций/методов

а сюда входят списки инициализации конструкторов?
а то ведь можно было бы замутить нечто такое:
Код

File(const char* path, const char* mode):f(LastCreatedFile=fopen(path,mode)) {f=fopen(path, mode);    }



--------------------
qqq
PM WWW   Вверх
Mayk
Дата 30.8.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(maxim1000 @ 30.8.2005, 22:32)
а сюда входят списки инициализации конструкторов?

Нет, не входят.

Цитата(maxim1000 @ 30.8.2005, 22:32)
а то ведь можно было бы замутить нечто такое:

Осталось лишь не закрыть f ))


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 30.8.2005, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Осталось лишь не закрыть f ))

нее...
при инициализации f будет равен LastCreatedFile
НО: потом выполнится тело конструктора, в котором f загрузится другим значением (скорее всего, будут проблемы с открытием файла второй раз на запись)
так что и закрывать будут это "новое" значение f...


--------------------
qqq
PM WWW   Вверх
Mayk
Дата 31.8.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Да, точно. Блин, надо было придумать другой вариант.
Ладно, вот вам еще один вариант решения(эх, я думал до него догадаетесь). Деструктим понемногу:
Код

class File{
    protected: FILE* f;    
    public:
    File(){f=NULL;}
    File(const char* path, const char* mode){f=fopen(path, mode);}
    ~File(){if(f)fclose(f);    }
};
class OutTextFile : virtual public File{
        public:
        OutTextFile() {}
        OutTextFile(const char* str) : File(str, "w"){}        void println(){fprintf(f,"\n");}
};
class DoNotCloseMe : virtual public File
{
    public:
    ~DoNotCloseMe(){lastCreatedFile=f;f=0;}
};
class LogFile : public OutTextFile, public DoNotCloseMe
{
    public:
    LogFile() : File("log.txt","w"){};
};


Это сообщение отредактировал(а) Mayk - 31.8.2005, 21:17


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1739 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.