Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1

Приведение типов

13.05.2012, 10:23. Показов 2409. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В паскале можно привести типы:
Pascal
1
2
3
type
  ts = 0..9;
  chislo = array[1..nmax] of ts;
Как это сделать на С++?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2012, 10:23
Ответы с готовыми решениями:

Приведение типов
Есть ли какая-нибудь разница в следующих выражениях: float a = 123.4f и float a = (float)123.4

Приведение типов
в GUI ни int str = static_convert<int>(Edit1->Text) ни int str = (int)Edit1->Text не приводит : E2034 Cannot convert...

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

19
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
13.05.2012, 11:33
В С++ есть оператор typedef.
Однако именно для такого случая
(ограничение диапазона значений переменной)
простого решения в голову не приходит.
Можно сделать контейнерный класс,
в котором задать эти ограничения
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
#include <iostream>
using namespace std;
class ts
{
private:
unsigned short val;
public:
    ts():val(0){}
ts& operator=(ts& a){val=a.val;return *this;} 
ts& operator=(int a)
{
    if(a<0)a=0;
    else if(a>9)a=9;
    val=a;
    return *this;
}
friend ostream& operator<<(ostream& os,ts& a)
{
    os<<a.val;
    return os;
}
};
int main(int argc, char *argv[])
{
    const int nmax=2;
    ts chislo[nmax];
    chislo[0]=10;
    chislo[1]=chislo[0];
    cout<<chislo[0]<<" "<<chislo[1];
    system("pause");
}
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
13.05.2012, 11:54
SeryZone, Вот так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
enum dig 
   {
      zero, one, two, three, four, five, six, seven, eight, nine
   };
  
dig digit;
 
int main()
{
    digit = one;
    std::cout << digit << std::endl;
}
http://liveworkspace.org/code/... 707c0ef999
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 12:02
Приведение типов в с++ намного, намного более мощное и запутанное чем в паскале, однако множеств в языке нету(ибо не нужны).
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
13.05.2012, 14:14
Цитата Сообщение от diagon Посмотреть сообщение
однако множеств в языке нету(ибо не нужны).
А как же std::set?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 14:17
Цитата Сообщение от go Посмотреть сообщение
А как же std::set?
Это просто класс, реализованный стандартными средствами. В паскале же множества прямо в язык встроены.
Да и вообще это разные вещи, множества в паскале нужны для упрощения записи, а set в с++ это отсортированный контейнер с уникальными значениями
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
13.05.2012, 14:23
Цитата Сообщение от diagon Посмотреть сообщение
Это просто класс, реализованный стандартными средствами. В паскале же множества прямо в язык встроены.
Это стандартный класс. Чего вы от него хотите? string в паскале что это?

Цитата Сообщение от diagon Посмотреть сообщение
Да и вообще это разные вещи, множества в паскале нужны для упрощения записи, а set в с++ это отсортированный контейнер с уникальными значениями
Цитата Сообщение от SeryZone Посмотреть сообщение
ts = 0..9;
Цитата Сообщение от go Посмотреть сообщение
enum dig
{
zero, one, two, three, four, five, six, seven, eight, nine
};
Я считаю это почти одно и тоже
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 14:31
Хотя нет, это не множества, а просто перечисляемый тип.

Цитата Сообщение от go Посмотреть сообщение
Я считаю это почти одно и тоже
Так что да, это почти одно и тоже.

А множества, это, к примеру, вот
Pascal
1
if 3 in [1..9] + [20..30]  //если 3 лежит в диапазоне [1..9] или в диапазоне [20..30]
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
13.05.2012, 14:33
Цитата Сообщение от go Посмотреть сообщение
Я считаю это почти одно и тоже
Отнюдь,
digit=9;
написать нельзя.
Придется писать
digit=nine;
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
13.05.2012, 14:38
Цитата Сообщение от diagon Посмотреть сообщение
А множества, это, к примеру, вот
Множество там и там одиново.
Pascal
1
set of char {например, так}
C++
1
std:;set<char>
Я не вижу разницы. Хотя функциональность явно в С++ повыше.

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
Отнюдь,
digit=9;
Но все Си это возможно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
enum dig 
   {
      zero, one, two, three, four, five, six, seven, eight, nine
   };
  
enum dig digit;
 
int main()
{
    digit = 9;
    printf("%d\n", digit); 
}
http://liveworkspace.org/code/... 7e46b6b753
В плюсах вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
enum dig 
   {
      zero, one, two, three, four, five, six, seven, eight, nine
   };
  
dig digit;
 
int main()
{
    digit = static_cast<dig> (9);
    std::cout << digit << std::endl;
}
http://liveworkspace.org/code/... 428b0191cc
Просто привели тип.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 14:39
Цитата Сообщение от zss Посмотреть сообщение
Отнюдь,
digit=9;
написать нельзя.
Придется писать
digit=nine;
Неправда, можно писать digit = 9
Хотя стоп, вроде нельзя. А вроде и можно было >_<''
Если явно привести тип, то точно можно.
Ну да, можно явно сравнивать с числами, а вот присваивать нельзя.

Цитата Сообщение от go Посмотреть сообщение
Я не вижу разницы. Хотя функциональность явно в С++ повыше.
Однако в с++ нельзя так удобно оперировать с множествами, как в паскале(задавать с помощью [a..b], пересекать с помощью оператора сложения и т.д.). Аналог того условия, что я привел выше, на с++ будет занимать ~10 строк.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
13.05.2012, 14:43
Цитата Сообщение от diagon Посмотреть сообщение
Если явно привести тип, то точно можно.
В С++ только так все и делается. Ведь 9 это целое число. http://liveworkspace.org/code/... 428b0191cc

Цитата Сообщение от diagon Посмотреть сообщение
Однако в с++ нельзя так удобно оперировать с множествами, как в паскале(задавать с помощью [a..b], пересекать с помощью оператора сложения и т.д.).
Ну как это нельзя??? Чуть-чуть извернутся, то и получится.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 14:52
Цитата Сообщение от go Посмотреть сообщение
Ну как это нельзя??? Чуть-чуть извернутся, то и получится
Чуть-чуть? :)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    std::set< int > first; //[0..9]
    for (int i = 0; i <= 9; ++i)
        first.insert(i);
        
    std::set< int > second; //[20..30]
    for (int i = 20; i <= 30; ++i)
        second.insert(i);
        
    std::set< int > third; //[0..9] + [20..30]
    std::set_union
    (
        first.begin(), first.end(),
        second.begin(), second.end(),
        std::inserter< std::set< int > > (third, third.begin() )
    );
    
    int x = 3;
    
    if ( third.find(x) != third.end() ) //...
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
07.07.2012, 21:42  [ТС]
Ладно, например я хочу получить не __int64 (до 264-1), а до 2128-1; Умельцы на хабе делали так, но как это сделать вообще?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.07.2012, 22:06
SeryZone, именно int - через длинку. Можно float/double, но вычисления будут происходить дольше.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
08.07.2012, 14:27  [ТС]
soon, напиши проще, я в С++ вообще очень мало понимаю.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.07.2012, 17:01
SeryZone, если нужен целочисленный тип, то через длинную арифметику. В противном случае можно воспользоваться вещественными типами данных, но вычисления будут происходить дольше.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
08.07.2012, 18:59  [ТС]
Блин... Я пробовал длиннную арифметику, но здесь её просто нет: http://habrahabr.ru/post/121950/
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.07.2012, 19:36
Цитата Сообщение от SeryZone Посмотреть сообщение
Я пробовал длиннную арифметику, но здесь её просто нет: http://habrahabr.ru/post/121950/
Тут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    typedef unsigned char   u8;
    typedef unsigned short u16;
    typedef unsigned int   u32;
 
    u16 a = 1000;
    u16 b = 2000;
    u32 r = 0;
 
    u8  * a_ptr = (u8*)&a;
    u8  * b_ptr = (u8*)&b;
    u16 * r_ptr = (u16*)(void*)&r;
 
    Karatsuba_multiply(a_ptr, b_ptr, r_ptr);
 
    cout << r;
}
фактически создается переменная типа u32, а в функцию передается указатель на эту переменную, но с типом u16. Остальные также урезаны вдвое. Каким макаром вы собрались делать 128 битную целочисленную переменную - непонятно.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
08.07.2012, 19:43  [ТС]
А, понятно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2012, 19:43
Помогаю со студенческими работами здесь

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

Приведение типов
Доброго времени суток. Пусть имеются две структуры struct Student { string FirstName; string LastName; int year;

Приведение типов
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

Приведение типов
Всем привет) Есть массив int a = {2 ,4 ,5 ,6 ,256} Числа располагаются по байтам в памяти так: 1б 2б 3б 4б 2 0 0 0 4 ...

Приведение типов
Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого qsort. Вот что получилось: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru