Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

Конструктор и деструктор для cout

02.03.2013, 17:17. Показов 1906. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здарова! нужно решить задачу:
есть код:
C++
1
2
3
4
int main()
{
   cout <<"Hellow world"<<endl;
}
нужно без модифицирования функции main заставить чтобы она выводила

razraz
Hellow world
dvadva

вообщем незнаю чо и делать это видемо нужно както создать конструктор и деструктор для объекта cout хелп?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2013, 17:17
Ответы с готовыми решениями:

Для класса задать конструктор и деструктор
Ребята,нужна помощь в написании программы. Для класса задать конструктор(для выделения...

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

Как выглядит конструктор и деструктор для vector ?
Есть класс: class table_m { public: vector &lt;Item&gt; table; table_m(); }; Как будет...

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

21
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.03.2013, 17:25 2
как делать не надо
адаптируйте этот пример под себя, в ходе адаптации придет понимание почему так делать не надо
1
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
02.03.2013, 17:34 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using std::cout;
using std::endl;
 
struct translit {
   translit() {
      cout << "razraz" << endl;
   }
   ~translit() {
      cout << "dvadva" << endl;
   }
} instance;
1
OhMyGodSoLong
02.03.2013, 18:00
  #4

Не по теме:

Предлагаю advanced challenge. Написать такую реализацию, чтобы

C++
1
2
3
4
int main()
{
    cout << "Hello" << " " << "World!";
}
выводило
Код
>>>
Hello World!
<<<
Grangmaster level — чтоб оно было reentrant и thread-safe.

1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
02.03.2013, 18:00  [ТС] 5
мне нужно так как gray_fox показал без перегрузки, токо я никак не пойму как оно работает?
да мы определили новую структуру, да мы создали в ней конструктор и деструктор, да мы ее вроде сразу и инициализировали instanse, но как она выводит перед и вконце?

ладно я понял просто просто вначале срабатывает код инициализации структуры, и ее конструктор, а затем кода строчка cout вывел свое мы срабатывает деструктор
0
gray_fox
02.03.2013, 18:03
  #6

Не по теме:

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Предлагаю advanced challenge.
Эмм... и в чём подвох?)

1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
02.03.2013, 18:07  [ТС] 7
В принципе старичок помог ты мне решить задачку которая решается за 5 минут, а я над ней бился несколько часов
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
02.03.2013, 18:14 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using std::endl;
using std::ostream;
 
struct Cout
{
    Cout() { std::cout << "razraz" << endl; }
    ~Cout() { std::cout << "dvadva" << endl; }
    ostream &operator<<( char *s ) { std::cout << s; return std::cout; }
} cout;
 
int main()
{
    cout <<"Hellow world"<<endl;
}
1
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.03.2013, 18:14 9
Цитата Сообщение от gray_fox Посмотреть сообщение

Не по теме:


Эмм... и в чём подвох?)

Не по теме:

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

C++
1
2
3
4
5
int main()
{
    cout << "Hello" << " " << "World!";
    cout << 42;
}
то вывело
Код
>>>
Hello World!
<<<
>>>
42
<<<
а не
Код
>>>
Hello World!42
<<<

2
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
02.03.2013, 18:22 10

Не по теме:

~OhMyGodSoLong~, понял.



Добавлено через 2 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
как оно работает
Глобальные объекты создаются до выполнения main, уничтожаются после.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
02.03.2013, 18:31  [ТС] 11
Цитата Сообщение от gray_fox Посмотреть сообщение

Не по теме:

~OhMyGodSoLong~, понял.



Добавлено через 2 минуты

Глобальные объекты создаются до выполнения main, уничтожаются после.
да я понял, но они не глобальные а в пространстве std

Чуточку свой блог пропиарю создал пост по этой задаче http://www.kselax.ru/2013/03/prostenkaya-zadachka/

Ну как бложек для первого пойдет?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
02.03.2013, 18:36 12
Цитата Сообщение от ninja2 Посмотреть сообщение
да я понял, но они не глобальные а в пространстве std
:/ Причём тут пространство имён std? instance - глобальный объект, создаётся до вызова ф-ии main (при создании выполняется тело соответствующего конструктора), уничтожается - после выполнения main (выполняется тело деструктора). Вот и всё)
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
02.03.2013, 18:39  [ТС] 13
Цитата Сообщение от gray_fox Посмотреть сообщение
:/ Причём тут пространство имён std? instance - глобальный объект, создаётся до вызова ф-ии main (при создании выполняется тело соответствующего конструктора), уничтожается - после выполнения main (выполняется тело деструктора). Вот и всё)
а ну да можно и глобально, то я тупанул.
0
gray_fox
02.03.2013, 19:52
  #14

Не по теме:

Вообщем, ничего лучше я не придумал)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
 
 
struct cout_tag {} cout;
 
 
struct cout_impl_t {
   cout_impl_t()  {
      std::cout << ">>>" << std::endl;
   }
   cout_impl_t(cout_impl_t const&) {
      ++counter;
   }
   ~cout_impl_t() {
      if (counter == 0) {
         std::cout << "<<<" << std::endl;
      } else {
         --counter;
      }
   }
   
private:
   static std::size_t counter;
};
 
std::size_t cout_impl_t::counter(0);
 
 
typedef std::ios_base & (*ios_base_manipulator_t)(std::ios_base &);
typedef std::ostream &  (*ostream_manipulator_t )(std::ostream & );
 
 
template<typename Type>
cout_impl_t operator <<(cout_impl_t impl, Type const& type) {
   std::cout << type;
   return impl;
}
 
cout_impl_t operator <<(cout_impl_t impl, ostream_manipulator_t manipulator) {
   std::cout << manipulator;
   return impl;
}
 
cout_impl_t operator <<(cout_impl_t impl, ios_base_manipulator_t manipulator) {
   std::cout << manipulator;
   return impl;
}
 
template<typename C, typename T>
cout_impl_t operator <<(cout_impl_t impl, std::basic_ios<C, T> & (*manipulator)(std::basic_ios<C, T> &)) {
   std::cout << manipulator;
   return impl;
}
 
 
template<typename Type>
cout_impl_t operator <<(cout_tag, Type const& type) {
   return (cout_impl_t() << type);
}
 
cout_impl_t operator <<(cout_tag, ostream_manipulator_t manipulator) {
   return (cout_impl_t() << manipulator);
}
 
cout_impl_t operator <<(cout_tag, ios_base_manipulator_t manipulator) {
   return (cout_impl_t() << manipulator);
}
 
template<typename C, typename T>
cout_impl_t operator <<(cout_tag, std::basic_ios<C, T> & (*manipulator)(std::basic_ios<C, T> &)) {
   return (cout_impl_t() << manipulator);
}
 
 
int main()
{
    cout << "Hello" << " " << "World!" << std::endl;
    cout << 42 << std::endl;
}
http://ideone.com/6ioc1u

1
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
02.03.2013, 20:21 15
Лучший ответ Сообщение было отмечено как решение

Решение

~OhMyGodSoLong~, а у нас будет свой cout, с блекджеком и тройными угловыми скобками!
5
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
02.03.2013, 20:34  [ТС] 16
gray_fox, Откуда ты так С++ хорошо знаешь, а то я все учю учю уже год и все нулевой.
Хо экспертом в С++ стать или хотябы выше среднего, а все никак не получается.
Что нужно задачек больше решать?

Или лучше технолугию учить например создание прикладных или системных программ,
или технологию создания игр??? С++ мб потом со временем приложиться хз.
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.03.2013, 02:56 17

Не по теме:

ninja2, общение помогает, этот форум например) Обычно книжек советуют почитать. А так я хз, что конкретно можно посоветовать. Изучай то, что считаешь нужным и\или интересным тебе - я поступаю так. Но я не профессионал и не эксперт (тем более в образовании).



Добавлено через 10 минут
Nick Alte, таки тут на оптимизацию надежда, как я понял? http://liveworkspace.org/code/4lZzzr
1
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
03.03.2013, 10:41 18
gray_fox, Это всего лишь забавное решение поставленной задачи в базовом варианте методом "хотите странный глобальный cout? Сделайте его сами!". Я вовсе не рекомендую его в качестве хорошей практики. А вот причин, чтобы оптимизация меняла поведение этой программы, не вижу. Время создания и уничтожения времянки hredir вполне себе определённое, там ни UB, ни implementation-defined, по моим представлениям, быть нигде не должно.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
12.05.2013, 16:15 19
Nick Alte, ссылка не рабочая
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
12.05.2013, 17:13 20
И все-таки, кому-нибудь удалось получить желаемый результат?
Оба предложенные в теме метода не позволяют его увидеть,
т.к. после вывода "двадва" окно обязано закрыться
(а следовательно, результата не увидим).
0
12.05.2013, 17:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2013, 17:13
Помогаю со студенческими работами здесь

Конструктор инициализации, конструктор копирования, деструктор
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

Конструктор, деструктор
Дорогие друзья, программисты. Помогите пожалуйста разобраться с конструктором и деструктором, а так...

Конструктор и деструктор
На сколько сильно они нужны и можно ли обойтись без них? Что будет если их не описывать? Что...

Конструктор и деструктор в С++
Никак не могу найти ошибку. Выдает несоответствие результата и функции /gkh.cpp/ #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru