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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квест для Сыроежки 
:(
    Опции темы
xvr
Дата 8.7.2011, 09:17 (ссылка) |    (голосов:11) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Тема навеяна квестом, проведенным 'Гуру от стандарта С++' Сыроежкой в теме 'микс' (кто не видел - там было 2 вопроса, посвященные тому, что char бывает знаковым и тонкостям автоматического приведения типов и integer promotion).
Квест не получил широкого отклика (видимо в силу банальности вопросов, а не их сверх сложности, как считал автор). Но заставил меня задуматься - а может мы чего то не знаем о стандарте С++, может Сыроежка в этом действительно разбирается лучше?  smile 

Тогда я и решил сделать то, чего никогда не делал (по крайней мере тут) - провести свой квест.
Вопросы предназначаются в первую очередь Сыроежке, попрошу остальных воздержаться от ответов, пока мы не получим кладезь премудрости от Сыроежки. Если вам очень приспичило - пишите мне в PM, я потом опубликую  smile 

Итак:

1) Как поймать исключение от конструктора A в конструкторе B?
Код

class A {
public:
 A() { ... throw ... }
};

class B : public A {
public:
 B() { ... }
};


2) Чего не хватает тут (и почему)?
Код

class A {
public:
 typedef int A_Type;
};

template<class Base>
class B : public Base {
 Base::A_Type a_var;
};


3) Какие ошибки есть тут?
Код

class A {
 void func_a();
public:
 void func_b();
};

template<class Base>
class B : public Base {
public:
 void my_a() {func_a();}
 void my_b() {func_b();}
};

int main()
{
  B<A> obj;
  obj.my_b();
}


4) Что делается тут?
Код

class A {
public:
 int operator<<(int) const;
};

int main()
{
 return A()<<1;
}



5) Чем отличаются *1 и *2?
Код

class A {
public:
 A();

 void print();
};

int main()
{
 A obj_a; // *1
 A obj_b(); // *2

 obj_a.print(); // *1
 obj_b.print(); // *2
}


6) [На закуску  smile ] Написать макрос ALIGNOF(t), возвращающий константу времени компиляции, равную выравниванию, для любого типа t (язык - C++)

Думаю достаточно

PM MAIL   Вверх
bems
Дата 8.7.2011, 09:36 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Во задело мужика smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
kemiisto
  Дата 8.7.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Так, я что-то пропустил. smile Кто такое Сыроежка и почему он должен пройти этот квест?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
mes
Дата 8.7.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(kemiisto @  8.7.2011,  09:30 Найти цитируемый пост)
Кто такое Сыроежка и почему он должен пройти этот квест? 

для ознакомления с ситуацией сюда : http://forum.vingrad.ru/forum/topic-332946...0%B7%D0%B0.html


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


Эксперт
****


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

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



xvr, а что так просто? Я думал тут будет что-то ужасно сложное... smile
PM   Вверх
Artemon
Дата 8.7.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



xvr, интересует ответ на вопрос №1. Моя гипотеза - никак не поймать ?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 8.7.2011, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Artemon, как человеков просили же:
Цитата(xvr @  8.7.2011,  09:17 Найти цитируемый пост)
попрошу остальных воздержаться от ответов, пока мы не получим кладезь премудрости от Сыроежки.


PM WWW   Вверх
volatile
Дата 8.7.2011, 23:55 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bsa @  8.7.2011,  16:40 Найти цитируемый пост)
а что так просто? Я думал тут будет что-то ужасно сложное...  

Вы переоцениваете объект. smile
Этого более чем достаточно.
PM MAIL   Вверх
Skevalt
Дата 9.7.2011, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xvr, было бы очень здорово, если вы озвучите в конце концов правильные ответы. Если испытуемый не появится. 
PM MAIL   Вверх
xvr
Дата 9.7.2011, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Artemon @  8.7.2011,  22:36 Найти цитируемый пост)
xvr, интересует ответ на вопрос №1. Моя гипотеза - никак не поймать ? 

Поймать можно, ответы будут позже
Цитата(Skevalt @  9.7.2011,  08:21 Найти цитируемый пост)
xvr, было бы очень здорово, если вы озвучите в конце концов правильные ответы.

Обязательно
Цитата(Skevalt @  9.7.2011,  08:21 Найти цитируемый пост)
Если испытуемый не появится. 

Даже если появится  smile 


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



**


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

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



Цитата(Skevalt @  9.7.2011,  08:21 Найти цитируемый пост)
Если испытуемый не появится.  

ему кто нибудь сообщил что его здесь ждут? )

Цитата(Artemon @  8.7.2011,  22:36 Найти цитируемый пост)
интересует ответ на вопрос №1

гугл в помошь, ведь с++ не вчера придумали, такие вопросы уже задавались.

xvr, я так понимаю в одном вопросе должна быть загвоздка? а то слишком просто все выглядит.
PM MAIL   Вверх
xvr
Дата 9.7.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(asmdzen @  9.7.2011,  09:52 Найти цитируемый пост)
ему кто нибудь сообщил что его здесь ждут? )

Да, дважды
Цитата(asmdzen @  9.7.2011,  09:52 Найти цитируемый пост)
я так понимаю в одном вопросе должна быть загвоздка? 
Ну, можно и так сказать  smile 
Цитата(asmdzen @  9.7.2011,  09:52 Найти цитируемый пост)
а то слишком просто все выглядит. 
Я не ставил цель всех всех запутать. Квест действительно простой



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


Эксперт
****


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

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



Цитата(xvr @  8.7.2011,  09:17 Найти цитируемый пост)
4) Что делается тут?

ИМХО не совсем корректный вопрос, потому что ответ "Описывается класс A, определяется оператор<< и т.п." можно назвать "зачётным". Может стОит  переформулировать типа "откомпилируется или нет, что выведется, etc." ? Подчёркиваю - IMHO

Цитата(xvr @  9.7.2011,  11:27 Найти цитируемый пост)
Квест действительно простой

может он больше шутеры любит smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Сыроежка
Дата 9.7.2011, 20:28 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вы можете заключить тело конструктора производного класса вместе со списком инициализации в блок try/catch.

Вы можете заключить тело конструктора производного класса вместе со списком инициализации в блок try/catch.
PM MAIL   Вверх
bems
Дата 9.7.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



два раза и медленно? smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
xvr
Дата 9.7.2011, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Сыроежка @  9.7.2011,  20:28 Найти цитируемый пост)
Вы можете заключить тело конструктора производного класса вместе со списком инициализации в блок try/catch.

О! Первый ответ получен. Только хотелось бы увидеть, как это должно быть записано в программе. Ну и дождаться ответов на остальные 5 вопросов  smile 


PM MAIL   Вверх
volatile
Дата 9.7.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А сколько будете ждать?
А то если очень долго, то с помощью интернета и более опытных "щнакомых" smile кто угодно
может ответить. Почти на все вопросы можно найти ответы в сети. Специально сейчас поискал.
Пример

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(volatile @  9.7.2011,  22:44 Найти цитируемый пост)
А сколько будете ждать?

До 12:00 10 Июля. И так уже слишком долго жду  smile 


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


pattern`щик
****


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

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



Цитата(Сыроежка @  9.7.2011,  20:28 Найти цитируемый пост)
Вы можете заключить тело конструктора производного класса вместе со списком инициализации в блок try/catch.

прошу прощения у всех форумчан.... но походу типок неадекват... снова прошу прощения smile

Добавлено через 1 минуту и 52 секунды
Цитата(xvr @  9.7.2011,  21:47 Найти цитируемый пост)
как это должно быть записано в программе

создание предка с помощью оператора newsmile 
PM WWW   Вверх
asmdzen
Дата 10.7.2011, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

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



Цитата(boostcoder @  10.7.2011,  03:18 Найти цитируемый пост)
но походу типок неадекват

я думаю он уже понял свою ошибку, с кем не бывает )
IMHO такие темы надо уже прекратить, троли быстро размножаются.
Цитата(boostcoder @  10.7.2011,  03:18 Найти цитируемый пост)
создание предка с помощью оператора new? 

чем try/catch не подходит?
PM MAIL   Вверх
borisbn
Дата 10.7.2011, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



> чем try/catch не подходит?
Присоединяюсь к вопросу 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 10.7.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  10.7.2011,  02:18 Найти цитируемый пост)
создание предка с помощью оператора new? 

просто заключить список инициализации в try-catch smile.. 


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


Шустрый
*


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

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



Ну и навалился на человека... В чем цель? Доказать, что ты прав? Мда, и это называется "Взрослый человек"...
PM MAIL   Вверх
xvr
Дата 10.7.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Hagrael @  10.7.2011,  09:29 Найти цитируемый пост)
В чем цель? Доказать, что ты прав?

Нет, это в доказательствах не нуждается. Хотелось доказать (Сыроежке), что кроме его мнения, бывают и другие. И что его мнение не может являться неопровержимой истинной, только потому, что оно его.

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

Посмотрите исходную тему, вы все поймете

Добавлено через 3 минуты и 10 секунд
Цитата(boostcoder @  10.7.2011,  03:18 Найти цитируемый пост)
но походу типок неадекват... снова прошу прощения 

То, что он неадекват и так видно (иначе бы этого опроса не было). А по поводу блока try catch он все же прав. Однако по формулировке ответа не понятно, как и куда он его собрался вставлять, поэтому правильным ответом я это принять пока не могу  smile 


PM MAIL   Вверх
volatile
Дата 10.7.2011, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Hagrael @  10.7.2011,  09:29 Найти цитируемый пост)
Ну и навалился на человека


Hagrael, Да дело даже не в том что объект мало что понимает в С/С++.
Дело в том что он хамло!
Вести спор нормально не может.
типичные фразы. "Я вас посадил в лужу." и прочее.
Причем искренне уверен в своей непогрешимости.
Чем чайник отличается от ламера?
Там что Ламер уверен в своей непогрешимости и других считает ниже себя.
Это Ламо 0х64% ( цифровую нотацию честно скопипастил у borisbn)


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Итак, сейчас 12:01, остальных ответов от Сыроежки мы так и не дождались. Мораторий на ответы снимаю  smile 

Предварительные результаты:

Сыроежка - ответил на 0.5 вопроса через полтора дня smile 

Azesmcar - ответил через 15 минут после начала квеста (по ПМ), практически на все вопросы. Была ошибка (исправленная во 2й итерации) в ответе на 6й вопрос. Так же не был замечен подвох в п3 (что правда не отразилось на правильности ответа)


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



**


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

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



xvr, в публику пожалуйста, думаю все уже видели вопросы и для себя знают ответы, но хотелось бы увидеть правильные, можно Azesmcar'а если он не против.
PM MAIL   Вверх
Сыроежка
Дата 10.7.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @  9.7.2011,  21:47 Найти цитируемый пост)
О! Первый ответ получен. Только хотелось бы увидеть, как это должно быть записано в программе. Ну и дождаться ответов на остальные 5 вопросов   


Что вам здесь не понятно?! После закрывающийся скобки со списком параметров конструктора ставите try затем список инициализации, затем тело конструктора, а после него catch. Если вас интересует пример, (а , как я уже кспел убедиться, стандарт вы не читаете, а читаете только художественную литературу о С++), то закляните во второй том  книги Эккеля "Философия С++" 

Я вообще не понимаю, что вы от меня хотите?! Например, что вы хотите от меня услышать в ответ на этот ваш пример?!

Цитата(xvr @  8.7.2011,  09:17 Найти цитируемый пост)
4) Что делается тут?

код C++

class A {
public:
 int operator<<(int) const;
};

int main()
{
 return A()<<1;
}


Тут ничего не деалется, кроме ошибки редактирования, так как у вас нет определения оператора <<. И что я должен был сказать еще?! Я вообзе не понимаю, что вы хотели показать этим своим кодом.

Это сообщение отредактировал(а) Сыроежка - 10.7.2011, 15:52
PM MAIL   Вверх
bsa
Дата 10.7.2011, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Сыроежка @  10.7.2011,  15:51 Найти цитируемый пост)
Если вас интересует пример, (а , как я уже кспел убедиться, стандарт вы не читаете, а читаете только художественную литературу о С++), то закляните во второй том  книги Эккеля "Философия С++"

А что, тебе лень было написать пару строчек примера? Синтаксис не такой уж и сложный, хотя и не особо очевидный.
PM   Вверх
xvr
Дата 10.7.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Сыроежка @ 10.7.2011,  15:51)
Цитата(xvr @  9.7.2011,  21:47 Найти цитируемый пост)
О! Первый ответ получен. Только хотелось бы увидеть, как это должно быть записано в программе. Ну и дождаться ответов на остальные 5 вопросов   


Что вам здесь не понятно?! После закрывающийся скобки со списком параметров конструктора ставите try затем список инициализации, затем тело конструктора, а после него catch. 

Угу, ответ засчитан

Цитата

Если вас интересует пример, (а , как я уже кспел убедиться, стандарт вы не читаете, а читаете только художественную литературу о С++), то закляните во второй том  книги Эккеля "Философия С++" 
Я ожидал увидеть его от вас, а не из книги о 'Философии С++'

Цитата

Я вообще не понимаю, что вы от меня хотите?! Например, что вы хотите от меня услышать в ответ на этот ваш пример?!

Ответ хочу услышать
Цитата

Тут ничего не деалется, кроме ошибки редактирования, так как у вас нет определения оператора <<. 
Неверно

Цитата

И что я должен был сказать еще?! 
Что тут создается экземпляр объекта A, от него вызывается оператор << с аргументом 1, результат, возвращенный оператором, используется как код возврата из программы

Цитата

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

По моему получилось достаточно убедительно  smile 



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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Сыроешка наконец появился и со свойственным ему апломбом снова полез обвинять других, не ответив на 5 вопросов из 6ти. Мне остается только восхищаться невообразимой наглостью этого перца  smile 


Обещанные ответы:

Цитата

1) Как поймать исключение от конструктора A в конструкторе B?

Код

class A {
public:
 A() { ... throw ... }
};

class B : public A {
public:
 B() try : A() { ... constr body ... } catch (...) { ...catch body ... } 
};


Цитата

2) Чего не хватает тут (и почему)?
Код

class A {
public:
 typedef int A_Type;
};

template<class Base>
class B : public Base {
 Base::A_Type a_var;
};

Не хватает typename перед Base::A_Type.
Код

template<class Base>
class B : public Base {
 typename Base::A_Type a_var;
};

Необходимость (да и само появление typename) обусловлено особенностью грамматики С, а именно тем, что она очень неоднозначная в местах, которые касаются использования типов. Поэтому, еще со времен самого первого С компилятора применяется хитрость в лексическом анализаторе - идентификаторы, обозначающие типы, трактуются на выходе из лексического анализатора именно как типы, а не как просто идентификаторы. Для этого лексический анализатор тесно взаимодействует с синтаксическим парсером и таблицей типов. 

Для шаблонов все становится совсем непросто, т.к. на момент компиляции собственно шаблона абсолютно неизвестно, что является типом, а что нет. Можно либо отложить компиляцию тела шаблона до момента его использования (что и делалось сначала). Но это приводит к тому, что масса ошибок в синтаксисе шаблона проявлялась только в момент его использования. Кроме того, при таком подходе было затруднительно реализовать фичу с экспортом шаблонов. Что бы можно было откомпилировать шаблон сразу и импортировать его, и было введено ключевое слово typename, которое используется в грамматике языка для отделения типов от идентификаторов.


Цитата

3) Какие ошибки есть тут?
Код

class A {
 void func_a();
public:
 void func_b();
};

template<class Base>
class B : public Base {
public:
 void my_a() {func_a();}
 void my_b() {func_b();}
};

int main()
{
  B<A> obj;
  obj.my_b();
}



Ошибки те же, что и в предыдущем случае - шаблоны требуют указать, что finc_a и func_b принадлежат классу Base, иначе синтаксический анализатор будет ругаться на неопределенные функции
Код

template<class Base>
class B : public Base {
public:
 void my_a() {Base::func_a();}
 void my_b() {Base::func_b();}
};
Здесь есть еще один подвох - Base::func_a() - приватная, но ошибки тем не менее не будет, т.к. она не используется, а значит и не компилируется (особенность шаблонов)

Цитата

4) Что делается тут?
Код

class A {
public:
 int operator<<(int) const;
};

int main()
{
 return A()<<1;
}



Тут все элементарно. Вот эквивалент:

Код

int main()
{
 A tmp;
 int tmp2 = tmp.operator << (1);
 return tmp2;
}


Цитата

5) Чем отличаются *1 и *2?
Код

class A {
public:
 A();

 void print();
};

int main()
{
 A obj_a; // *1
 A obj_b(); // *2

 obj_a.print(); // *1
 obj_b.print(); // *2
}

*1 - создание экземпляра класса A под именем obj_a, и в далбнейшем вызов метода print от него
*2 - прототип функции obj_b, возвращающий A. В дальнейшем синтаксическая ошибка при попытке вызвать метод от функции.
Правило С++ - то, что выглядит как прототип функции таковым и является (даже если программист имел в виду нечто иное)

Цитата

6) Написать макрос ALIGNOF(t), возвращающий константу времени компиляции, равную выравниванию, для любого типа t (язык - C++)


Код

template<class I>
struct AuxClassForAlignEvaluationWithLongNameForUniquty {
 char t1;
 I t2;
};
#define ALIGNOF(t) (sizeof(AuxClassForAlignEvaluationWithLongNameForUniquty<t>)-sizeof(t))




Это сообщение отредактировал(а) xvr - 10.7.2011, 19:11
PM MAIL   Вверх
Сыроежка
Дата 10.7.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @  10.7.2011,  18:45 Найти цитируемый пост)
Цитата

Тут ничего не деалется, кроме ошибки редактирования, так как у вас нет определения оператора <<. 
Неверно

Цитата

И что я должен был сказать еще?! 
Что тут создается экземпляр объекта A, от него вызывается оператор << с аргументом 1, результат, возвращенный оператором, используется как код возврата из программы


Да вы внимательно смотрите свой же код! У вас нет определения  этого оператора! Вы его только объявили! Поэтому редактор связей вам выдаст ошибку на этапе редактирования, так как не найдет определение этого оператора! Вы уж хоть бы сами в своих примерах разбирались!

Добавлено через 2 минуты и 17 секунд
Цитата(xvr @  10.7.2011,  19:08 Найти цитируемый пост)
Цитата

4) Что делается тут?
Выделить всёкод C++
1:
2:
3:
4:
5:
6:
7:
8:
9:
    
class A {
public:
 int operator<<(int) const;
};
int main()
{
 return A()<<1;
}



Да ничего не эквивалентно! У вас неработающий код, так как у вас нет определения оператора! Вы лишь его продекларировали! Поэтому программа работать не будет! Редактор связей выдаст ошибку, так как не найдет определение этого опреатора для вашего класса!

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


hell is here
**


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

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



Цитата(Сыроежка @  10.7.2011,  20:38 Найти цитируемый пост)
Редактор связей выдаст ошибку

линковщик чтоли? smile 

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


Эксперт
****


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

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



Цитата(xvr @  10.7.2011,  19:08 Найти цитируемый пост)
6) Написать макрос ALIGNOF(t), возвращающий константу времени компиляции, равную выравниванию, для любого типа t (язык - C++)

держался до последнего smile
Код
#define ALIGNOF( T ) (int)( & ( ( (AuxClassForAlignEvaluationWithLongNameForUniquty<T>*) 0 )->t2 ) )



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 10.7.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Сыроежка @  10.7.2011,  20:38 Найти цитируемый пост)
У вас нет определения  этого оператора!

Я имею право определить его в любом другом месте. 
Цитата(Сыроежка @  10.7.2011,  20:38 Найти цитируемый пост)
Вы уж хоть бы сами в своих примерах разбирались! 

Вы в своем репертуаре - вместо ответа на вопрос голословно обвиняете оппонента  smile 


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


Опытный
**


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

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



оффтоп: Почему C++-программисты ругаются, подобно Java-быдлокодерам?


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
bsa
Дата 11.7.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(spyswamp @  11.7.2011,  10:13 Найти цитируемый пост)
оффтоп: Почему C++-программисты ругаются, подобно Java-быдлокодерам? 

потому что быдлокодеры пишут на разных языках, а не только на Java. Просто иногда люди считают себя умней других и гнут свою линию не смотря на то, что речь может идти о совершенно других вещах.
PM   Вверх
spyswamp
Дата 11.7.2011, 10:30 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну, это я из темы прочитал. Только прикола все равно не понял. smile Есть такой класс личностей - ботан. Так вот, они умных слов нахватаются, что-то попробуют (не важно с каким успехом), а на деле ничего не умеют, кроме как мозги компостировать. smile Таких трогать не надо вообще, пусть повозникает и успокоится. К чему кормить? Или прикольно ###м покидаться на людях? smile

P.S. квесты ниче так в этих темах, освежают память. Если бы самоцелью было только это (а не травля, ботанов не затравишь, они тупые, чтобы это понять), то вообще шикарно было бы.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
Сыроежка
Дата 13.7.2011, 16:19 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @  10.7.2011,  20:44 Найти цитируемый пост)
Цитата(Сыроежка @  10.7.2011,  20:38 Найти цитируемый пост)
У вас нет определения  этого оператора!

Я имею право определить его в любом другом месте. 
Цитата(Сыроежка @  10.7.2011,  20:38 Найти цитируемый пост)
Вы уж хоть бы сами в своих примерах разбирались! 

Вы в своем репертуаре - вместо ответа на вопрос голословно обвиняете оппонента  smile 



ВЫ можете его определить хоть у себя на лбу! Это никого не касается. Но вы приводите конкретный пример кода и просите ответа на то, как этот  конкретный код будет себя вести. Я вам ответил. В следующий раз грамотно составляйте примеры. Если для вас определение опереатора не важно, то заключите в фигурные скобки либо многоточия, либо вставьте комментарий типа { /*function body*/},  и тогда вопросов не будет.
И как раз голословность имеет отношение к вам! Я вам конкретно указал, какоы будет результат работы вашего кода. Если вы безграмотны, то причем здесь я?!!

Это сообщение отредактировал(а) Сыроежка - 13.7.2011, 16:22
PM MAIL   Вверх
xvr
Дата 13.7.2011, 20:16 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Сыроежка @  13.7.2011,  16:19 Найти цитируемый пост)
то причем здесь я?!!

Не при чем, не при чем, успокойтесь. Санитары уже выехали ....

PM MAIL   Вверх
voral
Дата 13.7.2011, 23:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(spyswamp @  11.7.2011,  10:30 Найти цитируемый пост)
P.S. квесты ниче так в этих темах, освежают память. Если бы самоцелью было только это (а не травля, ботанов не затравишь, они тупые, чтобы это понять), то вообще шикарно было бы. 

+100500
Интересный бы мог быть раздел на форуме.
[OFF]
За попкорном, что ли сбегать.....
[/OFF]


Это сообщение отредактировал(а) voral - 13.7.2011, 23:24
PM MAIL WWW   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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