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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квест для Сыроежки 
:(
    Опции темы
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.

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


 




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


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

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