Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 09.01.2010, 13:15   #1
Praedo
Оператор ЭВМ
 
Аватар для Praedo
 
Регистрация: 16.12.2009
Адрес: Днепропетровск
Сообщений: 27
Написано 7 полезных сообщений
(для 17 пользователей)
Вопрос-задачка

Сначала озвучу задачку.

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

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

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

Hello!
It's me!
Good luck!

Я знаю решение задачи, но не помню правильный его синтаксис. Поэтому подожду пару дней пока решите, если нет дам подсказку)
__________________
В разработке RPG! При первой демке напишу темку.
Программист - тварь ленивая, но хитрая!

Последний раз редактировалось Praedo, 09.01.2010 в 14:23.
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 14:41   #2
jimon
 
Сообщений: n/a
Ответ: Вопрос-задачка

это даже не смешно
 
Ответить с цитированием
Старый 09.01.2010, 14:48   #3
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: Вопрос-задачка

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

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

Ща еще может чё-нить придумаю..
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32

Последний раз редактировалось Morganolla, 09.01.2010 в 16:24.
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:05   #4
Praedo
Оператор ЭВМ
 
Аватар для Praedo
 
Регистрация: 16.12.2009
Адрес: Днепропетровск
Сообщений: 27
Написано 7 полезных сообщений
(для 17 пользователей)
Ответ: Вопрос-задачка

Morganolla, я кажется писал что это "Задачка по с++ ООП", а ООП не подразумевает переопределение.)
__________________
В разработке RPG! При первой демке напишу темку.
Программист - тварь ленивая, но хитрая!
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:05   #5
jimon
 
Сообщений: n/a
Ответ: Вопрос-задачка

это еще не смешнее, правда вариантов решения тоже тыща

от :
void main()
{
cout << "Hello!" << endl << "It's me!" << endl << "Good luck!";
}
проходя :
void main()
{
cout << "Hello!\nIt's me!\nGood luck!";
}
до стреляния в ногу через центр нашей галактики (написания своих классов, загрузка данных из rar архива с тыщей паролей и тд)
 
Ответить с цитированием
Старый 09.01.2010, 16:07   #6
Praedo
Оператор ЭВМ
 
Аватар для Praedo
 
Регистрация: 16.12.2009
Адрес: Днепропетровск
Сообщений: 27
Написано 7 полезных сообщений
(для 17 пользователей)
Ответ: Вопрос-задачка

main менять нельзя.

Решений поубавилось?
__________________
В разработке RPG! При первой демке напишу темку.
Программист - тварь ленивая, но хитрая!
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:29   #7
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: Вопрос-задачка

Сообщение от Praedo Посмотреть сообщение
Morganolla, я кажется писал что это "Задачка по с++ ООП", а ООП не подразумевает переопределение.)
Я не точно выразился - перегрузить оператор... (это просто свойство русского языка...). А перегрузка - это самое настоящее ООП!!!
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:36   #8
jimon
 
Сообщений: n/a
Ответ: Вопрос-задачка

Praedo
а, недочитал
 
Ответить с цитированием
Старый 09.01.2010, 16:39   #9
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Вопрос-задачка

#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!";

Могу предложить более извращенные варианты
З.Ы. main() сохранена символ в символ
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (09.01.2010)
Старый 09.01.2010, 16:44   #10
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Вопрос-задачка

а перед вызовом мейна написать хело, а по выходу из мейна написать гуд лак !!
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:46   #11
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Вопрос-задачка

Ну вариант, тока не так. Просто переопределить точку входа программы (кто в танке - ей пофигу откуда стартовать, просто по дефолту int main()). Но как бэ задача стояла с ООП, да.
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:47   #12
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Вопрос-задачка

та не, в конструкторе пишем хело а деструкторе гуд лак !! А обьект класа инициализируем перед мейном !!
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:49   #13
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: Вопрос-задачка

Knightmare, классно! понял вопросов нет...
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 16:54   #14
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Вопрос-задачка

Сообщение от IGR Посмотреть сообщение
та не, в конструкторе пишем хело а деструкторе гуд лак !! А обьект класа инициализируем перед мейном !!
Ну да, можно типа такого:
#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!";

Но. Это будет работать только без оптимизаций. Умный компилятор тупо выпилит объект из релизной версии. Хотя это будет зависеть от компилятора и уровня оптимизации. В общем вариант не самый лучший.
З.Ы. В принципе есть директивы для отключения оптимизаций для отдельно взятого куска кода. Но опять же, кто гарантирует что они не зависят от компилятора?
(Offline)
 
Ответить с цитированием
Старый 09.01.2010, 18:20   #15
Praedo
Оператор ЭВМ
 
Аватар для Praedo
 
Регистрация: 16.12.2009
Адрес: Днепропетровск
Сообщений: 27
Написано 7 полезных сообщений
(для 17 пользователей)
Ответ: Вопрос-задачка

Knightmare, Респект за решение.

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

мне казалось что как то так:
class coutstream
{
public:
    
coutstream()
    {
        
std::cout << "Hello!" << std::endl;
    }
    ~
coutstream()
    {
        
std::cout << std::endl << "Good luck!";
    }
},
blah
__________________
В разработке RPG! При первой демке напишу темку.
Программист - тварь ленивая, но хитрая!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com