forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Вопрос-задачка (http://forum.boolean.name/showthread.php?t=11692)

Praedo 09.01.2010 13:15

Вопрос-задачка
 
Сначала озвучу задачку.

Задачка по с++ ООП:
При таком main'e (его изменять НЕЛЬЗЯ):

void main()
{
cout << "It's me!";
}

получить следующую картину в консоле:

Hello!
It's me!
Good luck!

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

jimon 09.01.2010 14:41

Ответ: Вопрос-задачка
 
это даже не смешно

Morganolla 09.01.2010 14:48

Ответ: Вопрос-задачка
 
Осмелюсь как новичек, после грустного профессора jimonа, предположить, что здесь надо переопределить оператор - operator << , ну и так далее...

PS После небольшого размышления пришел к выводу, что мона вроде еще проще - переопределить как макро типа
#define cout cout << "Hello!\nIt's me!\nGood luck!" // ...

Ща еще может чё-нить придумаю..

Praedo 09.01.2010 16:05

Ответ: Вопрос-задачка
 
Morganolla, я кажется писал что это "Задачка по с++ ООП", а ООП не подразумевает переопределение.)

jimon 09.01.2010 16:05

Ответ: Вопрос-задачка
 
это еще не смешнее, правда вариантов решения тоже тыща

от :
Код:

void main()
{
cout << "Hello!" << endl << "It's me!" << endl << "Good luck!";
}

проходя :
Код:

void main()
{
cout << "Hello!\nIt's me!\nGood luck!";
}

до стреляния в ногу через центр нашей галактики (написания своих классов, загрузка данных из rar архива с тыщей паролей и тд)

Praedo 09.01.2010 16:07

Ответ: Вопрос-задачка
 
main менять нельзя.

Решений поубавилось?

Morganolla 09.01.2010 16:29

Ответ: Вопрос-задачка
 
Цитата:

Сообщение от Praedo (Сообщение 132794)
Morganolla, я кажется писал что это "Задачка по с++ ООП", а ООП не подразумевает переопределение.)

Я не точно выразился - перегрузить оператор... (это просто свойство русского языка...). А перегрузка - это самое настоящее ООП!!!

jimon 09.01.2010 16:36

Ответ: Вопрос-задачка
 
Praedo
а, недочитал :)

Knightmare 09.01.2010 16:39

Ответ: Вопрос-задачка
 
PHP код:

#include <stdio.h>

class coutstream
{
public:
    
void operator<<(const char value)
    {
        
printf("Hello!\nIt's me!\nGood luck!");
    }
};

coutstream cout;

void main()
{
    
cout << "It's me!";


Могу предложить более извращенные варианты :crazy:
З.Ы. main() сохранена символ в символ

IGR 09.01.2010 16:44

Ответ: Вопрос-задачка
 
а перед вызовом мейна написать хело, а по выходу из мейна написать гуд лак !!

Knightmare 09.01.2010 16:46

Ответ: Вопрос-задачка
 
Ну вариант, тока не так. Просто переопределить точку входа программы (кто в танке - ей пофигу откуда стартовать, просто по дефолту int main()). Но как бэ задача стояла с ООП, да.

IGR 09.01.2010 16:47

Ответ: Вопрос-задачка
 
та не, в конструкторе пишем хело а деструкторе гуд лак !! А обьект класа инициализируем перед мейном !!

Morganolla 09.01.2010 16:49

Ответ: Вопрос-задачка
 
Knightmare, классно! понял вопросов нет...:)

Knightmare 09.01.2010 16:54

Ответ: Вопрос-задачка
 
Цитата:

Сообщение от IGR (Сообщение 132808)
та не, в конструкторе пишем хело а деструкторе гуд лак !! А обьект класа инициализируем перед мейном !!

Ну да, можно типа такого:
PHP код:

#include <iostream>

class coutstream
{
public:
    
coutstream()
    {
        
std::cout << "Hello!" << std::endl;
    }
    ~
coutstream()
    {
        
std::cout << std::endl << "Good luck!";
    }
};

coutstream blah;

void main()
{
    
std::cout << "It's me!";


Но. Это будет работать только без оптимизаций. Умный компилятор тупо выпилит объект из релизной версии. Хотя это будет зависеть от компилятора и уровня оптимизации. В общем вариант не самый лучший.
З.Ы. В принципе есть директивы для отключения оптимизаций для отдельно взятого куска кода. Но опять же, кто гарантирует что они не зависят от компилятора?

Praedo 09.01.2010 18:20

Ответ: Вопрос-задачка
 
Knightmare, Респект за решение.

А теперь вопрос мой:
как можно в объявлении класса (к примеру если оно в отдельном файле) сразу объявить глобальный объект?

мне казалось что как то так:
PHP код:

class coutstream
{
public:
    
coutstream()
    {
        
std::cout << "Hello!" << std::endl;
    }
    ~
coutstream()
    {
        
std::cout << std::endl << "Good luck!";
    }
},
blah



Часовой пояс GMT +4, время: 06:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot