Создать игру, создание игр, конструктора игр, игровые движки, разработка игр, сделать игру
Приветствую Вас Гость · Вход · Регистрация  ·  Новые сообщения · Участники · Правила · Поиск · RSS
  • Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: Конструктор  
C++ <<
Hagrael Дата: Суббота, 08.01.2011, 08:44 | Сообщение # 1
Просмотр профиля: Hagrael

Сообщений: [1475]
Что она означает конструкция "<<" в C++?

George & Daniel:
Война сухофруктов
KpoJIuk Дата: Суббота, 08.01.2011, 09:21 | Сообщение # 2


Сообщений: [316]
насколько я помню это отправление данных в объект, не помню точно... где-то в умных книжках по плюсам это точно описано, поищи.

Make games, not war!
Hagrael Дата: Суббота, 08.01.2011, 09:45 | Сообщение # 3
Просмотр профиля: Hagrael

Сообщений: [1475]
KpoJIuk, книжек-то у меня по нему нет =( В общем, кто знает, пишите, я пока в нете поищу.

George & Daniel:
Война сухофруктов
thitem Дата: Суббота, 08.01.2011, 18:28 | Сообщение # 4


Сообщений: [14]
Это двоичный сдвиг влево. По умолчанию работает только с целочисленными типами.
Синтаксис:
Значение << количество сдвигаемых бит

Например:
8<<1 = 16.
8<<2 = 32

А "отправка данных" в объект достигается за счет того, что в потоковых объектах эта операция переопределена.

KpoJIuk Дата: Суббота, 08.01.2011, 19:52 | Сообщение # 5


Сообщений: [316]
thitem, спасибо, запомню и больше не буду верить "умным книжкам"

Make games, not war!
Hagrael Дата: Воскресенье, 09.01.2011, 08:55 | Сообщение # 6
Просмотр профиля: Hagrael

Сообщений: [1475]
thitem, сказать по правде не совсем понял. Что значит побитный сдвиг? Вот у меня к примеру char, 8 бит, содержит число 10. При побитном сдвиге влево что произойдёт с битами и с самим числом, можешь сказать?

Добавлено (09.01.2011, 08:55)
---------------------------------------------
И ещё народ, кто знает, как на C++ включить русские буквы в консоли? Вот мой код №1:

Code
#include <windows.h> //нужна для функции CharToOem
int main() {
char buf[10];
char str[10]="qwertyuiop";
CharToOem(str, buf); //преобразование
cout<< buf << endl;
return 0;
}

И вот код №2:
Code
#include <iostream>
#include <windows.h>
#define BOILING_POINT_F 212
#define FREEZE_POINT_F 32
   
using namespace std;
   
int main() {
         SetConsoleCP(1251);
         SetConsoleOutputCP(1251);
   setlocale(LC_CTYPE, "Russian");
         float f, c;
         cout << "0C = " << FREEZE_POINT_F << "F\n" << "100C = " << BOILING_POINT_F << "F\n\n" << "ВВПРЕ";
         cin >> f;
}

И оба не работают =(

Добавлено (09.01.2011, 08:55)
---------------------------------------------
Точнее не то что не работают, а выводятся каракули =(


George & Daniel:
Война сухофруктов
PaintKiller Дата: Воскресенье, 09.01.2011, 10:35 | Сообщение # 7
Просмотр профиля: PaintKiller

Сообщений: [1738]
Quote (Hagrael)
И ещё народ, кто знает, как на C++ включить русские буквы в консоли?

В int main()
Code
setlocale (LC_CTYPE,"Russian");
Hagrael Дата: Воскресенье, 09.01.2011, 10:52 | Сообщение # 8
Просмотр профиля: Hagrael

Сообщений: [1475]
PaintKiller, не работает, я подключал windows.h и писал:
Code
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Безрезультатно.


George & Daniel:
Война сухофруктов
thitem Дата: Воскресенье, 09.01.2011, 11:16 | Сообщение # 9


Сообщений: [14]
Quote (Hagrael)
Что значит побитный сдвиг? Вот у меня к примеру char, 8 бит, содержит число 10. При побитном сдвиге влево что произойдёт с битами и с самим числом, можешь сказать?

Число 10 в двоичном виде будет иметь вид 00001010.
При сдвиге влево на единицу, все сдвинется вот так: 00010100. (Получится 20)
Еще раз сдвигаем, получится 00101000 (40)

Аналогично работает сдвиг вправо, если 00001010 сдвинуть вправо на единицу, получится 00000101 (5).

Сдвиг влево и вправо часто применяется для умножения и деления целого числа на 2, 4, 8, 16 и т.д., так как двоичные операции работают быстрее арифметических.

Hagrael Дата: Воскресенье, 09.01.2011, 13:24 | Сообщение # 10
Просмотр профиля: Hagrael

Сообщений: [1475]
thitem, спасибо, понял. А что с копированием данных в объект и из объекта? В этом я ваще ничё не понял.

George & Daniel:
Война сухофруктов
thitem Дата: Воскресенье, 09.01.2011, 15:47 | Сообщение # 11


Сообщений: [14]
Quote (Hagrael)
А что с копированием данных в объект и из объекта? В этом я ваще ничё не понял.

Дело в том, что в C++ есть возможность переопределения операций для пользовательских типов данных.

Пример переопределения операции присваивания:

Code

class my_type
{
     public:
     int operator=(int a) //функция, выполняющаяся при использовании оператора "=" с аргументом типа int
     {
         cout << a;//выведем на экран значение
         return a;
     }
};

Далее в main создаем объект:
my_type a;
А затем:
a=50;

В результате на экран выведет 50.

Примерно таким же образом в iostream.h создан класс, в котором переопределена операция "<<" и создан объект этого класса "cout".

Hagrael Дата: Воскресенье, 09.01.2011, 16:17 | Сообщение # 12
Просмотр профиля: Hagrael

Сообщений: [1475]
thitem, в общем я это так понял. В С++ при попытке сделать арифметическую операцию с объектом можно сделать какое-то действие, в аргумент функции попадает число, которое справа. Фактически, функция как пишется, так и должна вызываться:
Code
class my_class {
       int operator >> (int a) {
           cout << a;
       }
}
my_class obj;
obj >> 50;

Здесь ведь выйдет 50, так?

Добавлено (09.01.2011, 16:17)
---------------------------------------------
Да, круто! Большое тебе спасибо!


George & Daniel:
Война сухофруктов


Сообщение отредактировал: Hagrael - Воскресенье, 09.01.2011, 16:18
  • Страница 1 из 1
  • 1
Поиск:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр