Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конструкторы стандартных типов


Автор: IvanoffAndrey 4.5.2007, 19:42
Вопрос наверное необычный.
Известно что в C++ были добавлены конструкторы (по умолчанию и  копирования и может что то еще, точно больше не знаю) для правильной работы шаблонов.
Т.е. к примеру:
пусть имеется эта функция
Код

template <typename T>
T blabla(T t)
{
      T buf(t);
      return (buf);
};

Естественное если бы конструкторов копирования для стандартных типов небыло, то вызов этой функции вида
Код

int a(5);
int b=blabla(a);

не прокатил бы. Т.е. конструкторы стандартным типам ввели для совместимости синтаксиса с объектами.
Вопрос: 
1.Есть ли деструкторы, хотябы пустые или какие нибудь, по умолчанию.
2.Виртуальные ли они.
3.Можно ли скажем public унаследовать от стандартного типа, хотябы в теории.
4. Самое главное: 
Преподаватель на паре спросил очень странную вещь: Когда возможна  строчка буквально int(int) и что должно стоять в левой части этого выражения.
Мне кажется это вообще дико: передавать в конструктор копирования тип.

Автор: Daevaorn 4.5.2007, 19:55
Цитата(IvanoffAndrey @  4.5.2007,  20:42 Найти цитируемый пост)
3.Можно ли скажем public унаследовать от стандартного типа, хотябы в теории.

встроенные типы не наследуются.

Автор: IvanoffAndrey 4.5.2007, 20:00
Цитата

встроенные типы не наследуются.

Так и предполагал, хотя странно?
А как насчет всего остальнового. Поспорили в универе, что решу эту задачу №4, а я ума не приложу как такое возможно.

Автор: Daevaorn 4.5.2007, 20:08
Цитата(IvanoffAndrey @  4.5.2007,  21:00 Найти цитируемый пост)
хотя странно?

почему же, всё вполне логично
Цитата(IvanoffAndrey @  4.5.2007,  20:42 Найти цитируемый пост)
1.Есть ли деструкторы, хотябы пустые или какие нибудь, по умолчанию.2.Виртуальные ли они.

нет. при интстанцировании шаблона данным типом и явном вызовом деструтора,будет сделан фейковый пустой.
Цитата(IvanoffAndrey @  4.5.2007,  21:00 Найти цитируемый пост)
А как насчет всего остальнового. Поспорили с преподом, что решу эту задачу №4, а я ума не приложу как такое возможно.

ну два решения на ум приходят сразу.

Автор: JackYF 4.5.2007, 20:11
Цитата(IvanoffAndrey @  4.5.2007,  19:42 Найти цитируемый пост)
озможна  строчка буквально int(int) и что должно стоять в левой части этого выражения.


Код

#define int(int) ;

 smile 

А если серьезно, то не понял формулировки задачи. Это должно быть частью выражения? или просто строковым фрагментом выражения? Объясни.

Автор: IvanoffAndrey 4.5.2007, 20:14
Цитата

ну два решения на ум приходят сразу. 

так что за решение то? я заинтригован.

Цитата

Цитата(IvanoffAndrey @  4.5.2007,  21:00 Найти цитируемый пост)
хотя странно?

почему же, всё вполне логично

Можешь подробнее - не вижу причин.

Добавлено через 3 минуты и 17 секунд
Цитата
    
#define int(int) ;

Оценил юмор и свою глупость, точно. Но вдруг не это? Может что еще есть?

Добавлено через 4 минуты и 36 секунд
Цитата

А если серьезно, то не понял формулировки задачи. Это должно быть частью выражения? или просто строковым фрагментом выражения? Объясни.


Фиг его знает.
Когда мне это написали на доске я спросил: А что слева.
Мне ответили: Сразу все поймешь.
Т.е. напишите все варианты пожалуйста какие знаете.

Добавлено через 13 минут и 36 секунд
Цитата

ну два решения на ум приходят сразу. 

Одно решение с дефайном уже есть.
Какие еще два то?

Автор: archimed7592 4.5.2007, 21:28
4. 
Код
int Foo (int);
int Bar (double, int);
boost::function < int (int) > f;
f = &Foo;
f = boost::bind (Bar, 10, boost::lambda::_1);
boost::signal < int (int) > sig;
sig.connect (f);
sig.connect (&Foo);
// ну и т. д.


Автор: IvanoffAndrey 4.5.2007, 21:54
Воо!!!!!!!!! archimed7592 - спасибо, то что нужно. Если бы я знал как поставить тебе плюс, я бы это с удовольствием -  расскажи где прочитать об этом.

Автор: Anikmar 4.5.2007, 22:27
Цитата(IvanoffAndrey @  4.5.2007,  21:54 Найти цитируемый пост)
Если бы я знал как поставить тебе плюс, я бы это с удовольствием 

Поставлено  smile 

Автор: Fazil6 4.5.2007, 22:54
archimed7592, а без буста никак чтоли?

Код

void ff2(int(int)) {}


Автор: archimed7592 5.5.2007, 11:18
Fazil6, ну я лично не понимаю что эта запись означает... понимаю, что это тип какой-то... но какой? smile

Цитата(IvanoffAndrey @  4.5.2007,  21:54 Найти цитируемый пост)
расскажи где прочитать об этом.
http://boost.org/doc/html/function/tutorial.html

Автор: IvanoffAndrey 5.5.2007, 11:55
Всем большое спасибо.
Тема наверное закрыта. 

Автор: Samotnik 5.5.2007, 17:08
2 IvanovAndrew
Не забудь поставить галочку "Тема закрыта"

Автор: IvanoffAndrey 5.5.2007, 19:45
Я бы поставил, только немогу найти где это делается.
Даже не могу найти FAQ по пользованию форума.

Автор: JackYF 6.5.2007, 10:19
Когда пишешь ответ в тему, которую сам создал, внизу под ответом появляется галочка что-то типа "Закрыть тему". Попробуй поискать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)