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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра в С++, 7-й тайм 
V
    Опции темы
FiMa1
Дата 28.8.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго здравия, друзья!
Очередная, небольшая задачка, заданная в г. N госпоже N на собеседовании:
Что делает приведенная ниже функция, для чего можно ее использовать? С какими значениями параметров целесообразно вызывать функцию, для чего предназначен каждый из параметров?
Т.к. ответа не было предоставлено, пришлось ограничиться собственным предположением, коим поделюсь позже.. Интересно было бы взглянуть на ваши догадки.
Код
int f(int a[], int b, int c)
{
    for ( int i = 1; --i + b > 0; )
        if( !( c ^ a[~i + 1]) )
            for( ; i-- + b; )
                if( !( c ^a[~i + 1]) )
                    return -i; 

    return -1;
}


Это сообщение отредактировал(а) FiMa1 - 28.8.2007, 15:22
PM   Вверх
Dray
Дата 28.8.2007, 15:44 (ссылка) |    (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



За такие функции надо руки отрывать


--------------------
忍者

user posted image
PM MAIL   Вверх
Lazin
Дата 28.8.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



ф-я ищет в массиве a из b элементов значение c и возвращает его индекс, иначе -1


Это сообщение отредактировал(а) Lazin - 28.8.2007, 15:52
PM MAIL Skype GTalk   Вверх
Freak_FB
  Дата 28.8.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


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

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



Код проанализирован, и вот что получается:
Функция определяет второе вхождение значения, заданного параметром c, в массив, заданный параметром a. Параметром b целесообразно обозначить размер этого массива минус 1.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
Solomon
Дата 28.8.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Freak_FB @  28.8.2007,  15:05 Найти цитируемый пост)
Параметром b целесообразно обозначить размер этого массива минус 1.

всмысле -1.. что задать размер отриц числом???


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
FiMa1
Дата 28.8.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Lazin @ 28.8.2007,  15:52)
ф-я ищет в массиве a из b элементов значение c и возвращает его индекс, иначе -1

Код
#include <iostream>
using namespace std;

int f(int a[], int b, int c)
{
    for ( int i = 1; --i + b > 0; )
        if( !( c ^ a[~i + 1]) )
            for( ; i-- + b; )
                if( !( c ^a[~i + 1]) )
                    return -i; 

    return -1;
}

void main()
{
    int a[] = { 1, 2, 3, 4, 5, 6, 7 };

    // найти значение 1 в массиве a
    int res = f(a, (sizeof(a) / sizeof(a[0])) - 1, 1);

    if( res != -1)
        cout << res << endl;
    else
        cout << "not found\n";
}

Результат: not found...

Добавлено через 2 минуты и 44 секунды
Цитата(Freak_FB @ 28.8.2007,  16:05)
Код проанализирован, и вот что получается:
Функция определяет второе вхождение значения, заданного параметром c, в массив, заданный параметром a. Параметром b целесообразно обозначить размер этого массива минус 1.

Freak_FB, садитесь - 5! И +1 в репу!

Это сообщение отредактировал(а) FiMa1 - 28.8.2007, 16:10
PM   Вверх
Lazin
Дата 28.8.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата

Параметром b целесообразно обозначить размер этого массива минус 1. 

b - просто размер массива, так как в выражении --i + b > 0 сначала выполнится декримент, а потом сложение и сравнение, про второй элемент согласен.
PM MAIL Skype GTalk   Вверх
Fazil6
Дата 28.8.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(FiMa1 @  28.8.2007,  15:19 Найти цитируемый пост)
Что делает приведенная ниже функция, для чего можно ее использовать? С какими значениями параметров целесообразно вызывать функцию, для чего предназначен каждый из параметров?

ну если тут не наличествует отсутствие вообще всякого смысла, то похоже на поиск в массиве a размером b каких-то повторяющихся значений с
а вообще согласен с 
Цитата(Dray @  28.8.2007,  15:44 Найти цитируемый пост)
За такие функции надо руки отрывать
причем по жопу

PM MAIL   Вверх
FiMa1
Дата 28.8.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
За такие функции надо руки отрывать, причем по жопу

Будьте внимательны: оторвав руки по самую жопу слушателю на собеседовании, вы можете не получить желаемой работы  smile ! Всем спасибо!
PM   Вверх
JackYF
Дата 28.8.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(FiMa1 @  28.8.2007,  16:19 Найти цитируемый пост)
Будьте внимательны: оторвав руки по самую жопу слушателю на собеседовании, вы можете не получить желаемой работы  smile ! Всем спасибо! 

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


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Rockie
Дата 28.8.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(FiMa1 @  28.8.2007,  16:19 Найти цитируемый пост)
Будьте внимательны: оторвав руки по самую жопу слушателю на собеседовании, вы можете не получить желаемой работы

Желаемая работа, как я понимаю - это программы делать, а не brainfuck разгадывать smile

Цитата(FiMa1 @  28.8.2007,  15:19 Найти цитируемый пост)
Очередная, небольшая задачка, заданная в г. N госпоже N на собеседовании

А работодатель с юморком smile




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Любитель
Дата 29.8.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Скажем НЕТ извращенцам!!!

Это сообщение отредактировал(а) Любитель - 29.8.2007, 23:20


--------------------
PM MAIL ICQ Skype   Вверх
Fazil6
Дата 29.8.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Любитель @  29.8.2007,  22:46 Найти цитируемый пост)
Скажем НЕТизвращенцем!!!

читал... 
много думал... 

Так и не решл где тут очепятка...

Это сообщение отредактировал(а) Fazil6 - 29.8.2007, 22:52
PM MAIL   Вверх
Любитель
Дата 29.8.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Теперь пойдёт? smile


--------------------
PM MAIL ICQ Skype   Вверх
zkv
Дата 29.8.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



FiMa1, интересно, а сколько времени давали? 
Цитата(Dray @  28.8.2007,  15:44 Найти цитируемый пост)
За такие функции надо руки отрывать

согласен, при практическом применении.
Но рискну утверждать, что для собеседования задание может считаться вполне приемлимым. 
В конце-концов, возможно, это задание шло на правах "повышенной сложности", и было не обязательным для решения.
PM MAIL   Вверх
Любитель
Дата 29.8.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(zkv @  29.8.2007,  23:41 Найти цитируемый пост)
Но рискну утверждать, что для собеседования задание может считаться вполне приемлимым

А я так не считаю. Для вопроса в универе как раз нормально - многие преподя любят спрашивать подобную чушь, а вот при собеседование при приёме на работу - ни в коем случае.


--------------------
PM MAIL ICQ Skype   Вверх
zkv
Дата 30.8.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Любитель, я думаю хороший тест должен быть составлен так, чтобы никто не мог выбить максимальный балл.
Должны быть простые вопросы, сложные, и почти нерешаемые. 
Ты ведь не станешь жаловаться на то, что в тестах на IQ некоторые вопросы слишком сложные?
Если присутствовать только простые вопросы будут, то по какому принципу отсеивать кандидатов?
Конкретно этот решенный вопрос будет свидетельствовать о способности кандидата разбирать чужой код, 
если справится с этим чудовищем, то со всем остальным и подавно.
Мой итог: вопрос имеет право на жизнь, при правильной оценки работодателем решения кандидата.
PM MAIL   Вверх
FiMa1
Дата 30.8.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zkv @ 29.8.2007,  23:41)
FiMa1, интересно, а сколько времени давали? 
Но рискну утверждать, что для собеседования задание может считаться вполне приемлимым. 
В конце-концов, возможно, это задание шло на правах "повышенной сложности", и было не обязательным для решения.

То, что за такие функции в практике надо руки отрывать - неоспоримый факт, но, в рамках собеседования, задача, имхо, имеет право на существование.
1. Проверка первой реакции человека на предложенную задачу - первое что хочется сделать, это действительно оторвать руки собеседника и отойти в сторону, но с какой стороны это охарактеризует вас для работодателя?
2. Проверка способностей к разбору чужого кода + знание побитовых операций, префиксного, постфиксного декрементов в целом...
На вопрос сколько было дано времени на решение - думаю около 15 минут, вряд ли больше... В любом, случае, мое мнение таково - хватать ручку, бумагу, задавать входные значения и анализировать, анализировать (Freak_FB, насколько я понимаю, анализировал под дебагерром). Лучше анализировать вслух, тогда, если не хватит времени, будет видно, что все усилия были приложены. В конце концов, я думаю, zkv был прав насчет того, что задание было не обязательным для решения.
Вообще, забавно, что вы заговорили о самом собеседовании.. Вот вам еще задачка, заданная там же:
Есть некий класс A, где-то в программе создан указатель на этот класс и объект типа данного класса. Как реализован класс, что будет ошибка компиляции, в строке обозначенной в коде ниже. Что это за ошибка? Каково тело класса? Подсказка: вопрос связан с областью видимости переменных.
Старайтесь провести анализ без использования компилятора для моделирования реальных условий  smile !
Код
class A
{
    // ... какое-то тело
};

int main()
{
    A *p;
    A obj; // здесь возникнет ошибка компиляции

    return 0;
}


Это сообщение отредактировал(а) FiMa1 - 30.8.2007, 08:49
PM   Вверх
zkv
Дата 30.8.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(FiMa1 @  30.8.2007,  08:47 Найти цитируемый пост)
Подсказка: вопрос связан с областью видимости переменных.

у меня не связано smile
Код

class A
{
  A(){}
};

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


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



есть конструктор с параметрами и нет конструктора без параметров.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
FiMa1
Дата 30.8.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Shaggie @ 30.8.2007,  09:00)
есть конструктор с параметрами и нет конструктора без параметров.

Это первое что я сказал, но ВОПРОС СВЯЗАН С ОБЛАСТЬЮ ВИДИМОСТИ ПЕРЕМЕННЫХ, ответили мне   smile (здесь изменено для моделирования ситуации)...

Добавлено @ 09:06
Цитата(zkv @ 30.8.2007,  08:59)
Цитата(FiMa1 @  30.8.2007,  08:47 Найти цитируемый пост)
Подсказка: вопрос связан с областью видимости переменных.

у меня не связано smile
Код

class A
{
  A(){}
};

Что имел в виду?

Это сообщение отредактировал(а) FiMa1 - 30.8.2007, 09:07
PM   Вверх
zkv
Дата 30.8.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(FiMa1 @  30.8.2007,  09:03 Найти цитируемый пост)
Что имел в виду?

что такой код выдаст именно такую ошибку, что и требовалось smile
Код

class A
{
  A(){}
};
int main()
{
    A *p;
    A obj; // здесь возникнет ошибка компиляции
    return 0;
}

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


Опытный
**


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

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



Цитата(zkv @ 30.8.2007,  09:12)
что такой код выдаст именно такую ошибку, что и требовалось

Ладно не будем тянуть кота за х..., zkv - пять баллов, ты прав и успешно принят на работу  smile ! Я не сомневаюсь, что ты знаешь о чем говоришь, но не мог бы раскрыть чуть более подробнее для последователей...

Это сообщение отредактировал(а) FiMa1 - 30.8.2007, 09:18
PM   Вверх
zkv
Дата 30.8.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(FiMa1 @  30.8.2007,  09:17 Найти цитируемый пост)
zkv - пять баллов, ты прав,

дык у меня решение не связано с областью видимости.

все просто, по умолчанию все члены класса закрытые, можно было явно написать private: или protected: перед конструктором, только не так интересно будет smile
ну а дальше ясно - указатель он и в африке указатель, он и на абстрактный тип может быть, для него конструктор не нужен
а вот для объекта вызывается конструктор умолчания, а он закрыт, вот компилятор и сообщает: "ты определись давай!"
PM MAIL   Вверх
FiMa1
Дата 30.8.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zkv @ 30.8.2007,  09:22)
дык у меня решение не связано с областью видимости.
все просто, по умолчанию все члены класса закрытые, можно было явно написать private: или protected: перед конструктором, только не так интересно будет smile
ну а дальше ясно - указатель он и в африке указатель, он и на абстрактный тип может быть, для него конструктор не нужен
а вот для объекта вызывается конструктор умолчания, а он закрыт, вот компилятор и сообщает: "ты определись давай!"

 smile  тогда ставим слушателям на собеседовании не зачет, потому что однозначно убеждали, что cannot access private member declared in class 'A', в данном случае связана с областью видимости, т.к., в их случае деструктор, закрыт... Меж тем, может быть правда на их стороне и данная ситуация подпадает под понятие области видимости...

Это сообщение отредактировал(а) FiMa1 - 30.8.2007, 09:29
PM   Вверх
zkv
Дата 30.8.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



FiMa1, я под областью видимости привык понимать следующее:
Код

{
  int a;
//начало области видимости a
...
//конец области видимости a
}

а то о чем шла речь выше - это модификаторы доступа.
Может где-нибудь принято называть по другому.
PM MAIL   Вверх
UnrealMan
Дата 30.8.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FiMa1 @  30.8.2007,  09:28 Найти цитируемый пост)
тогда ставим слушателям на собеседовании не зачет, потому что однозначно убеждали, что cannot access private member declared in class 'A', в данном случае связана с областью видимости

Это каким надо быть извращенцем, чтобы accessibility перевести на русский как область видимости. В топку таких работодателей. Лучше не иметь с ними никаких дел.
PM MAIL   Вверх
FiMa1
Дата 30.8.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 30.8.2007,  10:08)
Это каким надо быть извращенцем, чтобы accessibility перевести на русский как область видимости. В топку таких работодателей.

О переводе речь не ведется, cannot access private member declared in class 'A' - копипаст трактования ошибки студией..
Насколько я понял, само то, что закрытые классом конструктор/деструктор невидимы (а по моему, лучше недоступны) на данном участке программы (Керниган: область видимости - участок программы, где это имя известно), подгоняли под понятие области видимости.
Пробежался по стандарту - в разделе Declarative regions and scopes ничего про данный взгляд на область видимости не нашел...
PM   Вверх
UnrealMan
Дата 30.8.2007, 10:43 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FiMa1 @  30.8.2007,  10:21 Найти цитируемый пост)
Насколько я понял, само то, что закрытые классом конструктор/деструктор невидимы (а по моему, лучше недоступны) 

Видимость и доступность – совсем разные вещи. Давай посмотрим на такой пример:

Код
struct A
{
    void f(double) {}
private:
    void f(int) {}
};

int main()
{
    A().f(0.); // OK
    A().f(0);  // error
}

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

Цитата(FiMa1 @  30.8.2007,  10:21 Найти цитируемый пост)
Пробежался по стандарту - в разделе Declarative regions and scopes ничего про данный взгляд на область видимости не нашел...

Цитата(ISO/IEC 14­882:2003(E) §3.3 Declarative regions and scopes)
In general, each particular name is valid only within some possibly discontiguous portion of program text called its scope.

Вот scope – это и есть область видимости.


Это сообщение отредактировал(а) UnrealMan - 30.8.2007, 10:48
PM MAIL   Вверх
FiMa1
Дата 30.8.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 30.8.2007,  10:43)
Видимость и доступность – совсем разные вещи.

По-моему из моей фразы:
Цитата
Насколько я понял, само то, что закрытые классом конструктор/деструктор невидимы (а по моему, лучше недоступны)
 видно, что я осознаю эту разницу и, разумеется, согласен с тем, что ты говоришь..
Цитата
Вот scope – это и есть область видимости.

Спасибо  smile, но это мне тоже было известно...
PM   Вверх
UnrealMan
Дата 30.8.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FiMa1 @  30.8.2007,  10:50 Найти цитируемый пост)
но это мне тоже было известно... 

А что ты тогда искал в пункте 3.3? Про accessibility там, естественно, ничего нет; вопросы доступности рассматриваются в главе 11 Member access control.
PM MAIL   Вверх
Mayk
Дата 30.8.2007, 19:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(FiMa1 @  30.8.2007,  12:47 Найти цитируемый пост)

2. Проверка способностей к разбору чужого кода + знание побитовых операций, префиксного, постфиксного декрементов в целом...

Как знание префиксных/постфиксных она отдалена от реальности.  
Разбор
Код

for(std::vector<int>::iterator it = vec.begin(); it != vec.end(); it++ )

vs
Код

for(std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it )

принесёт гораздо больше полезной информации. 

Цитата(FiMa1 @  30.8.2007,  12:47 Найти цитируемый пост)
class A
{
    // ... какое-то тело
};
int main()
{
    A *p;
    A obj; // здесь возникнет ошибка компиляции
    return 0;
}

вот ешё один изуверский способ завалить в A obj. Правда выходим за рамки тела класса. Но совсем чуть чуть.
Код

class A
{
    public:
    void operator* ( A p ){}
}A,p;

int main()
{
    A* p; // валидно.  вызывает op* для переменных A и p.
    A obj; // ерунда
}



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


Новичок



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

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



Код

!( c ^ a[~i + 1])


какую функцию выполняют ^ и тильда перед i ? 
PM MAIL   Вверх
UnrealMan
Дата 31.8.2007, 10:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати, могу подкинуть одну простенькую задачку. Есть код

Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }
        
/* ... */

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

Что нужно вставить вместо /* ... */, чтобы вывелось "ellipsis"? Макросы и комментарии использовать запрещается. Вводить новую перегруженную функцию f тоже.

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 11:00
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
#include <iostream>
using namespace std;

template <class T> void f(const T &t)
{
    cout << "template" << endl;
}

void f(...)
{
    cout << "ellipsis" << endl;
}


void f(int x, ...)
{
    cout << "ellipsis" << endl;
}

int main()
{
    int x = 10;

    f(x); // должно быть выведено: "ellipsis"
}

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


Опытный
**


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

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



Я немного усложнил требование: вводить новую перегруженную f нельзя.

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 11:02
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 31.8.2007,  11:02)
Я немного усложнил требование: вводить новую перегруженную f нельзя.

А x обязательно в качестве аргумента передавать, его ведь можно и убрать f();  smile 
А, ну да, ведь нужно добавить некий кусочек, ну тогда как вариант...

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


Опытный
**


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

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



Обязательно. Иначе смысл задачи теряется.

Добавлено @ 11:08
Можно лишь заменять /* ... */ на какой-то код. Править существующий код или добавлять код куда-то ещё не допускается.

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 11:08
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 11:27 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
#include <iostream>
using namespace std;

template <class T> void f(const T &t)
{
    cout << "template" << endl;
}

void f(...)
{
    cout << "ellipsis" << endl;
}

void (&x)(...) = f;

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

PM   Вверх
UnrealMan
Дата 31.8.2007, 11:43 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ссылка на функцию будет передана шаблонной функции, которая выведет "template" smile
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 11:45 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 31.8.2007,  11:43)
Ссылка на функцию будет передана шаблонной функции, которая выведет "template" smile

Компилировал?
PM   Вверх
bsa
Дата 31.8.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(FiMa1 @ 31.8.2007,  11:45)
Цитата(UnrealMan @ 31.8.2007,  11:43)
Ссылка на функцию будет передана шаблонной функции, которая выведет "template" smile

Компилировал?

gcc 4.1.2 выдает "template"
PM   Вверх
FiMa1
Дата 31.8.2007, 12:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <iostream>
using namespace std;

template <class T> void f(const T &t)
{
    cout << "template" << endl;
}

void f(...)
{
    cout << "ellipsis" << endl;
}

void x(){}

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



FiMa1 ты хоть проверяешь?

Вот еще вариант, но немного "читерский" smile
Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }

#include <unistd.h>
struct s
{
       s() { f(0,0); ::close(1); }
} x;

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}


Это сообщение отредактировал(а) bsa - 31.8.2007, 12:08
PM   Вверх
FiMa1
Дата 31.8.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @ 31.8.2007,  11:57)
Цитата(FiMa1 @ 31.8.2007,  11:45)
Цитата(UnrealMan @ 31.8.2007,  11:43)
Ссылка на функцию будет передана шаблонной функции, которая выведет "template" smile

Компилировал?

gcc 4.1.2 выдает "template"

 smile  У меня Visual Studio 2005 Professional Edition... Сам недоумеваю над результатом. У кого еще аналогичный компилятор, перепроверьте, плз.. Просто очень интересно, это что бага студии..
Код
#include <iostream>
using namespace std;

template <class T> void f(const T &t)
{
    cout << "template" << endl;
}

void f(...)
{
    cout << "ellipsis" << endl;
}

void (&x)(...) = f;
void (*x_)(...) = f;

int main()
{
    f(x);  // печатает "ellipsis"
    f(x_); // печатает "template" 
}


Это сообщение отредактировал(а) FiMa1 - 31.8.2007, 12:14
PM   Вверх
UnrealMan
Дата 31.8.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



x будет передана как ссылка на функцию

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 12:12
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 31.8.2007,  12:08)
будет то же самое smile

По поводу? Так не правильно дописать что ли void x(){} ?
PM   Вверх
UnrealMan
Дата 31.8.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я, кстати, не видел в стандарте разрешения использовать указатели и ссылки на функции-эллипсисы.

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 12:21
PM MAIL   Вверх
Fazil6
Дата 31.8.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну и запрета там походу тоже нет

FiMa1, специально проверил твой последний вариант.

Microsoft Visual Studio 2005
Version 8.0.50727.762  (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727

шаблон в обоих случаях вызвался 

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


Опытный
**


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

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



Что не разрешено, то запрещено.
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 31.8.2007,  12:17)
Я, кстати, не видел в стандарте разрешения использовать указатели и ссылки на функции-эллипсисы.

Ну а тот вариант где сам x - функция?
Код
...
void x(){}

int main()
{
    f(x);
...
}

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


Опытный
**


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

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



x будет передана ссылкой на функцию в шаблонную функцию
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Fazil6 @ 31.8.2007,  12:20)
FiMa1, специально проверил твой последний вариант.
Microsoft Visual Studio 2005
Version 8.0.50727.762  (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727
шаблон в обоих случаях вызвался

 smile не знаю.. перестроил проект (Empty Console Project), Microsoft Visual Studio 2005, Version 8.0.50727.42  (RTM.050727-4200), Installed Edition: Professional - то же самое (ellipsis, template)...
Но здравая логика, говорит, что компилятор возможно не прав..

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


Опытный
**


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

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



Если стандарт никак не огововаривает поведение ссылок на функции с эллипсисами, то тут не о чем говорить. Результат может быть любой.
PM MAIL   Вверх
bns
Дата 31.8.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня в VS2005
Код


template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }
void f(...)
        { std::cout << "ellipsis" << std::endl; }
        
void (&x)(...) = f;

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}



выдает ellipsis
PM MAIL   Вверх
UnrealMan
Дата 31.8.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Задачка элементарная, и у неё есть вполне стандартное решение. Вставить надо всего одну простую строчку кода. Даже короче, чем void x(){} smile

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 13:39
PM MAIL   Вверх
bsa
Дата 31.8.2007, 14:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }

enum { x = 10};

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

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


Опытный
**


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

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



Цитата(bsa @ 31.8.2007,  14:08)
Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }

enum { x = 10};

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

у меня "template" выводит  smile 
PM   Вверх
UnrealMan
Дата 31.8.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну наконец-то smile Всё правильно: локальные и анонимные типы в шаблонах не выводятся.

Так что такие варианты

enum {x};
enum {} x;
class {} x;

всегда будут идти мимо шаблонов

Добавлено через 1 минуту и 7 секунд
Цитата(FiMa1 @  31.8.2007,  15:11 Найти цитируемый пост)
у меня "template" выводит  

Компилятор смени. Стандарт запрещает вывод анонимных типов.
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(UnrealMan @ 31.8.2007,  14:14)
Компилятор смени. Стандарт запрещает вывод анонимных типов.

Мда уж.. Так же стандарту не соответствует Borland C++ Builder Enterprise Suite Version 6.0 (Build 10.157). Вариант с классом прогонял уже давно, вот ведь гады  smile 
Аналогичная ситуация и для dev-cpp v 4.9.8.0  smile 

Это сообщение отредактировал(а) FiMa1 - 31.8.2007, 14:28
PM   Вверх
bsa
Дата 31.8.2007, 15:22 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Вообще-то речь идет про анонимные типы. Т.е. enum X { x = 10; }; - это не анонимный тип
PM   Вверх
UnrealMan
Дата 1.9.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FiMa1 @  31.8.2007,  15:22 Найти цитируемый пост)
Так же стандарту не соответствует Borland C++ Builder Enterprise Suite Version 6.0

Помнится, у борланда вообще какие-то странности с enum-ами были. Попробуй в нём скомпилировать такой код

Код

#include <iostream>
#include <ostream>

enum En { zero };

void f(...) { std::cout << "f(...)" << std::endl; }
void f(int *) { std::cout << "f(int *)" << std::endl; }

int main()
{
    f(zero);
    f(zero * 0);
    f(1-1);
}

Что вывелось на экран?

Это сообщение отредактировал(а) UnrealMan - 1.9.2007, 10:16
PM MAIL   Вверх
Любитель
Дата 1.9.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



 smile 
Цитата(UnrealMan @  1.9.2007,  10:14 Найти цитируемый пост)
#include <ostream>

Зачем?


--------------------
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 1.9.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Любитель @  1.9.2007,  16:30 Найти цитируемый пост)
Зачем? 

Для std::endl smile

PM MAIL   Вверх
bsa
Дата 1.9.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(UnrealMan @ 1.9.2007,  17:13)
Цитата(Любитель @  1.9.2007,  16:30 Найти цитируемый пост)
Зачем? 

Для std::endl smile

iostream сам подключает ostream и istream.
PM   Вверх
Mayk
Дата 1.9.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(bsa @  2.9.2007,  00:00 Найти цитируемый пост)

iostream сам подключает ostream и istream.

Формально говоря, если это и следует из текущего стандарта, то очень уж не явно. 

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


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



а разве std::cout, std::cerr и std::cin не экземпляры потомков соответствующих классов?
PM   Вверх
UnrealMan
Дата 1.9.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @  1.9.2007,  21:00 Найти цитируемый пост)
iostream сам подключает ostream и istream. 

Это естественная, но необязательная реализация smile
PM MAIL   Вверх
Mayk
Дата 1.9.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(bsa @  2.9.2007,  01:45 Найти цитируемый пост)
а разве std::cout, std::cerr и std::cin не экземпляры потомков соответствующих классов? 

Код

//     Header <iostream> synopsis

           namespace std {
             extern istream            cin;
             extern ostream            cout;
             extern ostream            cerr;
             extern ostream            clog;

               extern     wistream       wcin;
               extern     wostream       wcout;
               extern     wostream       wcerr;
               extern     wostream       wclog;
           }

вот что говорит стандарт.
Код

           namespace std {
 class istream;
 class ostream;
class wistream;
class wostream;

             extern istream            cin;
             extern ostream            cout;
             extern ostream            cerr;
             extern ostream            clog;

               extern     wistream       wcin;
               extern     wostream       wcout;
               extern     wostream       wcerr;
               extern     wostream       wclog;
           }

Вполне себе собирается. Это во-первых.

Во-вторых. endl не является членом [io]stream'а. Поэтому даже если в iostream определяется ostream, это вовсе не факт что endl в нём  объявлен. 
Цитата(UnrealMan @  2.9.2007,  02:13 Найти цитируемый пост)
Цитата(bsa @  1.9.2007,  21:00 Найти цитируемый пост)
iostream сам подключает ostream и istream. 

Это естественная, но необязательная реализация


Правда, в стандарте есть пример в разделе 27.6.1.3
Код

               #include <iostream> //единтсвенный #include

               int main()
               {
                 using namespace std;
                 const int line_buffer_size = 100;

                   char buffer[line_buffer_size];
                   int line_number = 0;
                   while (cin.getline(buffer, line_buffer_size, '\n') || cin.gcount()) {
                     int count = cin.gcount();
                     if (cin.eof())
                                                          // cin.fail() is false
                       cout << "Partial final line";
                     else if (cin.fail()) {
                       cout << "Partial long line";
                       cin.clear(cin.rdstate() & ~ios::failbit);
                     } else {
                                               // Don't include newline in count
                       count--;
                       cout << "Line " << ++line_number;
                     }
                     cout << " (" << count << " chars): " << buffer << endl; //<<<<<<<<<<<<<<
                   }
               }

из которого можно сделать вывод о том что endl в iostream'е таки подразумевается.
[что любопытно, в примере из раздела 14.6 используется cout << ... << '\n']

Это сообщение отредактировал(а) Mayk - 1.9.2007, 22:25


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


Опытный
**


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

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



Цитата(Mayk @  1.9.2007,  23:21 Найти цитируемый пост)
Правда, в стандарте есть пример в разделе 27.6.1.3

Ну, в стандарте много незаконченных примеров smile 

Это сообщение отредактировал(а) UnrealMan - 2.9.2007, 10:05
PM MAIL   Вверх
The Thing
Дата 3.9.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



скажите, а что в коде означает символ тильда "~i"?
Код

c ^ a[~i + 1]) 



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Lazin
Дата 3.9.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



The Thing, ~ - отрицание, так-как i - отрицательное число, то ~i = abs(i) - 1 
~(-1) = 0
~(-2) = 1 итд
а xor там для сравнения
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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