Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование переменных, из одного типа в другой. 
V
    Опции темы
Pentium02
Дата 11.12.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



Я новичок. Собственно чабж. Например как преобразовать int в char?
PM MAIL WWW ICQ   Вверх
Partizan
Дата 11.12.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Код

int i = 0;
char c = (int)i;

это C-style

с++ style это <static_cast>,<dynamic_cast>,<reinterpret_cast>


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 12.12.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Partizan, ещё есть const_cast.


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 12.12.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Partizan @ 11.12.2006,  23:38)
Код

int i = 0;
char c = (int)i;
         ^^^^^^^^
         Интересный пример 


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

Чисто int к char можно в весьма ограниченных пределах (-128 +127)

Если исправить ошибку в примере, то так:

Код

int i = 0;
char c = (char)i;




PM MAIL ICQ   Вверх
vinter
Дата 12.12.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Любитель, а какое отношение Const_cast имеет к преобр. типа??
он же только снимает константность smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
Гениальный123Робот
Дата 12.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(Anikmar @ 12.12.2006,  18:16)
Чисто int к char можно в весьма ограниченных пределах (-128 +127)

Добавлю, что если в эти пределы не укладываетесь, то компилятор никакой ошибки не выдаст, а будет работать в "эффекте сворачивания", чтобы все же поместить свой остаток в заданный интервал.  
PM MAIL   Вверх
Partizan
Дата 12.12.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



е-хе ))) и правда  smile  smile )

char c = (char) i;


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 14.12.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



vinter, const и volatile - атрибуты, определяющие тип (const int и int - это разные типы), именно ими занимается const_cast.


--------------------
PM MAIL ICQ Skype   Вверх
zabivator
Дата 14.12.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Цитата(Любитель @ 14.12.2006,  17:41)
vinter, const и volatile - атрибуты, определяющие тип (const int и int - это разные типы), именно ими занимается const_cast.

+1
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Любитель
Дата 14.12.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



 smile 
zabivator, ты уже второй раз пишешь +1, а плюсик не давишь  smile  Впрочем всё сие не твои вопросы - согласен.


--------------------
PM MAIL ICQ Skype   Вверх
Xenon
Дата 14.12.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Любитель,  smile 
Плюс за помощь ставится, а не за согласие smile


--------------------
user posted image  
PM MAIL   Вверх
FelikZ
Дата 14.12.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Привет люди!

А кто нибуть подскажет как можно преобразовать:

Код

struct A
{
    int x;
    bool y;
};
struct B
{
    int x2;
    bool y2;
};
int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    B b;
    b=(B)a;
    return 0;
}


Так пишет: error C2440: 'type cast' : cannot convert from 'A' to 'B'.

Это сообщение отредактировал(а) FelikZ - 14.12.2006, 21:25


--------------------
user posted image
PM WWW ICQ Skype   Вверх
JackYF
Дата 14.12.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



FelikZ, структуры твои. Преобразование придется писать тоже тебе:

Например, сделай у B конструктор копирования, который принимает A:

Код

struct B
{
  int x2;
  bool y2;
  
  B( const A& a )
  {
    x2 = a.x;
    y2 = a.y;
  }
};

Как-нибудь так.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
FelikZ
Дата 14.12.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Спасибо JackYF!
Все работает smile 


--------------------
user posted image
PM WWW ICQ Skype   Вверх
Rockie
Дата 15.12.2006, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Xenon @  14.12.2006,  19:17 Найти цитируемый пост)
Плюс за помощь ставится, а не за согласие 

Xenon, ну, насчет этого правил нет. imho плюс можно ставить когда считаешь нужным smile

FelikZ, можно поинтересоваться что ты хочешь сделать? 
Код
int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    A b;
    b=a;
    return 0;
}

и все.
А если в твоих классах будут указатели, то тогда уже понадобится конструктор копирования и перегруженное присваивание. 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Любитель
Дата 15.12.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Rockie, он хотел преобразовать из одного в другой тип, одинаковые по внутреннему представлению. Лучше всего это делать так, как сказал, JackYF. Я бы правда сделал конструктор с explicit (при разрастании структур случайные преобразования могут оказаться некстати). Да сишные кастования не использовал, а просто бы вызвал конструктор. Скажем так:
Код

B b(a);

Или так:
Код

B b;
b = B(a);


Если мы уверены, что две структуры имеют абсолютно одинаковое внутренне представление, то можно воспользоваться и другими способами (вроде memcpy). Но, по-моему, сие не для плюсов (я бы не стал делать).


--------------------
PM MAIL ICQ Skype   Вверх
Rockie
Дата 15.12.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Любитель @  15.12.2006,  10:38 Найти цитируемый пост)
Rockie, он хотел преобразовать из одного в другой тип, одинаковые по внутреннему представлению. 

Любитель, а какой смысл создавать объект из такого же объекта? Если можно создать экземпляр этого же класса и пользоваться встроенным присваиванием. Возможно, такая необходимость и может возникнуть, но врядли это необходимо в данном случае. 




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
FelikZ
Дата 15.12.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Люди не стоит делать из мухи слона smile  Это был чисто теоритический
вопрос - просто я незнал как это зделать с помощью структур, а оказалось,
что это делается так же как и в классах...


--------------------
user posted image
PM WWW ICQ Skype   Вверх
NoNo
Дата 16.12.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Я вообще тоже новичок......и как я знаю то, что преобразование в C++ лудше делать спомощью 
 static_cast<тип>(значение)
PM MAIL   Вверх
Anikmar
Дата 16.12.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(NoNo @ 16.12.2006,  12:57)
Я вообще тоже новичок......и как я знаю то, что преобразование в C++ лудше делать спомощью 
 static_cast<тип>(значение)

Абсолютно верно - типа преобразование при помощи скобок - старый стиль Си...
(Хотя у Лаффоре основной аргумент использования static_cast - это то, что его поиском удобнее искать в случае чего)

Но привычка вторая натура - никак не могу себя заставить такое длинное писать  smile 
PM MAIL ICQ   Вверх
UnrealMan
Дата 16.12.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Любитель @  15.12.2006,  10:38 Найти цитируемый пост)
Да сишные кастования не использовал, а просто бы вызвал конструктор.

Цитата(Любитель @  15.12.2006,  10:38 Найти цитируемый пост)
b = B(a);

B(a) – это преобразование типа, эквивалентное (B)a

Цитата(NoNo @  16.12.2006,  12:57 Найти цитируемый пост)
преобразование в C++ лудше делать спомощью 
 static_cast<тип>(значение) 

По-моему, ничем оно не лучше, кроме тех случаев, когда cast- или functional- форма преобразования делает не то, что на самом деле требуется.
PM MAIL   Вверх
Любитель
Дата 18.12.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(UnrealMan @  16.12.2006,  14:42 Найти цитируемый пост)
B(a) – это преобразование типа, эквивалентное (B)a

Это вызов конструктора. Для типа, не являющегося классом - это приведение в стиле функций.

Цитата(UnrealMan @  16.12.2006,  14:42 Найти цитируемый пост)
cast- или functional- форма преобразования

 smile cast == привденение. Под преобразованием обычно понимают именно преобразование (например, строки в число).

Цитата(UnrealMan @  16.12.2006,  14:42 Найти цитируемый пост)
По-моему, ничем оно не лучше, кроме тех случаев, когда cast- или functional- форма преобразования делает не то, что на самом деле требуется. 

1. Оно явно виднеется в коде невооружённым глазом.
2. Оно не позволит сделать многое, что позволят сделать кастования в сишном стиле. Типосейфити очень важная вещь в плюсах.


--------------------
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 18.12.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Любитель @ 18.12.2006,  14:58)
2. Оно не позволит сделать многое, что позволят сделать кастования в сишном стиле. Типосейфити очень важная вещь в плюсах.

Этого я не знал. Можно примерчик? 
PM MAIL ICQ   Вверх
nickless
Дата 18.12.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Anikmar @ 18.12.2006,  14:21)
Этого я не знал. Можно примерчик?

Тут Страуструп пишет:
Код
    int a = 7;
    double* p1 = (double*) &a;        // ok (but a doesn't point to a double)
    double* p2 = static_cast<double*>(&a);        // error
    double* p2 = reinterpret_cast<double*>(&a);    // ok: I really mean it

    const int c = 7;
    int* q1 = &c;            // error
    int* q2 = (int*)&c;        // ok (but *q2=2; is still invalid code and may fail)
    int* q3 = static_cast<int*>(&c);    // error: static_cast doesn't cast away const
    int* q4 = const_cast<int*>(&c);    // I really mean it



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Anikmar
Дата 18.12.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Мда... Век живи - век учись.

Все равно дураком помрешь...
PM MAIL ICQ   Вверх
UnrealMan
Дата 19.12.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Любитель @  18.12.2006,  14:58 Найти цитируемый пост)
Это вызов конструктора. Для типа, не являющегося классом - это приведение в стиле функций.

Да что ты говоришь? :-)

Хочешь сказать, вот здесь

Код
struct B {} b;
struct A
{
    operator B() { return b; }
} a;

int main()
{
    B b = B(a); // это мы конструктор B(a) здесь вызываем, да? :-)
}

вызов конструктора?

Цитата(ISO/IEC 14882:2003(E) §5.2.3 Explicit type conversion (functional notation))
A simple-type-specifier (7.1.5) followed by a parenthesized expression-list constructs a value of the specified type given the expression list. If the expression list is a single expression, the type conversion expression is equivalent (in definedness, and if defined in meaning) to the corresponding cast expression (5.4).


Цитата(Любитель @  18.12.2006,  14:58 Найти цитируемый пост)
cast == привденение

Что приведение типа, что преобразование типа – я как-то это не различаю.

Цитата(Любитель @  18.12.2006,  14:58 Найти цитируемый пост)
1. Оно явно виднеется в коде невооружённым глазом.

Угу, и занимает много места :-)

Цитата(Любитель @  18.12.2006,  14:58 Найти цитируемый пост)
Оно не позволит сделать многое, что позволят сделать кастования в сишном стиле. 

Я это прекрасно знаю, потому и написал:

Цитата(UnrealMan @  16.12.2006,  14:42 Найти цитируемый пост)
кроме тех случаев, когда cast- или functional- форма преобразования делает не то, что на самом деле требуется. 

Например, в ситуации, когда cast- или functional- форма приведения оказывается эквивалентной a static_cast followed by a const_cast, а нужно только static_cast-приведение, следует использовать именно оператор static_cast. Если указатель/ссылка базового типа приводится к указателю/ссылке производного, то следует избегать возможного приведения в виде reinterpret_cast (которое наверняка будет ошибочным). А вот зачем использовать оператор static_cast в приведении, скажем, void * к int * ? Или же в приведении вроде B(a), как это делалось выше? С чем тут можно спутать static_cast?

Это сообщение отредактировал(а) UnrealMan - 19.12.2006, 11:53
PM MAIL   Вверх
JackYF
Дата 19.12.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



UnrealMan, неточность у тебя.


Цитата(Любитель @  18.12.2006,  14:58 Найти цитируемый пост)
Для типа, не являющегося классом 

Видел? А у тебя и А и В - классы.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
UnrealMan
Дата 20.12.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(JackYF @  19.12.2006,  14:49 Найти цитируемый пост)
UnrealMan, неточность у тебя.

Может, я ещё не проснулся и поэтому туго соображаю. Покажи пальцем, где у меня неточность.

Цитата(JackYF @  19.12.2006,  14:49 Найти цитируемый пост)
Видел? А у тебя и А и В - классы.

Вот именно, что у меня это классы, а B(a) при этом – «приведение в стиле функции», где нет никакого вызова конструктора. И там, где B(a) приводит к вызову конструктора, это всё равно «приведение в стиле функции».

Это сообщение отредактировал(а) UnrealMan - 20.12.2006, 09:17
PM MAIL   Вверх
Любитель
Дата 20.12.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



UnrealMan, другой пример.
Код

struct A
{
    A(int a, int b) {}
}

int main()
{
    A a = A(1, 4); // глупо при ините, но формально допутимо
    а = А(3, 7); // нормально. Создаётся временный объект и присваивается.
}


Для последнего случая компилер часто использует оптимизацию, для предотвращение лишнего копирования. Впрочем не всегда.

Суть в том, что приведение от двух элементов невозможно (очевидно). В твоём примере также вызывается конструктор для конструирования временных объектов. Если интересует ссылка на стандарт - приду домой посмотрю, приведу.

Цитата(UnrealMan @  19.12.2006,  11:37 Найти цитируемый пост)
Что приведение типа, что преобразование типа – я как-то это не различаю.

А зря. Это разные вещи.


--------------------
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 20.12.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Любитель @  20.12.2006,  13:52 Найти цитируемый пост)
В твоём примере также вызывается конструктор для конструирования временных объектов.

Хорошо, может вызваться копирующий конструктор класса B (именно за счёт B(a) – как дополнение к вызову конструктора за счёт инициализации объекта b). И что, из-за этого преобразование B(a) ты будешь называть вызовом конструктора? :-)

Цитата(Любитель @  20.12.2006,  13:52 Найти цитируемый пост)
Суть в том, что приведение от двух элементов невозможно (очевидно). 

Преобразование возможно.

Цитата(Любитель @  20.12.2006,  13:52 Найти цитируемый пост)
А зря. Это разные вещи. 

Приведение – это преобразование единичного выражения.

Это сообщение отредактировал(а) UnrealMan - 21.12.2006, 10:18
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.