Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
#1

Преобразования типов. Определить тип переменной - C++

24.04.2014, 22:00. Просмотров 998. Ответов 8
Метки нет (Все метки)

Всем привет

Недавно начал изучать язык C++ по книжке "Объектно-ориентированное программирование в C++" и там есть тема (Преобразование типов) вот пример из этой темы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
  int intVar=1500000000;
  intVar=(intVar*10)\10;
  
  cout << "Значение intVar равно " << intVar << endl;
 
  intVar=1500000000;
  intVar=(static_cast<double>(intVar)*10)/10;
 
  cout << "Значение intVar равно " << intVar << endl;
 
return 0;
}

Если допустим я запишу вот так......

int var1=10;
int sum=static_cast<double>(var1)*10;

В результате у переменной sum какой тип данных будет?? int или double.

И второй вопрос есть ли смысл от этого преобразование "как в примере из книжке" если можно сразу у этой переменной объявить тип double и не мудрить???
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 22:00     Преобразования типов. Определить тип переменной
Посмотрите здесь:

Как определить тип переменной? - C++
isdigit тока нашел. а как узнать char или int или есть типа is_array? конечно можно все реализовать на перегрузке функции но лучшеб...

Определить тип передаваемой в функцию переменной - C++
Добрый день! Подскажите как правильно объявить переменную elem, которая передаётся в функцию. Выводит ошибку. Менял типы передаваемых...

Определить тип переменной. Динамический анализ - C++
Заранее прошу прощения если что то сделаю не так, это мое первое сообщение Мне нужно определить какой тип имеет переменная, а именно...

Преобразования типов - C++
Имеются несколько структур, содержащих один и тот же набор элементов, но в разных последовательностях. ({x,y,z};{y,x,z};{z,y,x},...). ...

Преобразования типов - C++
Имеется такое выражение t=(i*j)*((e^(x))) ,где t-double x,i,j-int e-float Когда подставляю значения и считаю выдает...

Преобразования типов - C++
Почему можно присваивать символьной переменной типа char целые числа? И наоборот, целочисленному типу int можно присваивать символы....

Преобразования типов - C++
Доброго времени суток. Разбираясь с преобразователями типов в С++ возник вот такой вопрос: допустим у нас есть класс Alpha и какая-то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
24.04.2014, 22:17     Преобразования типов. Определить тип переменной #2
Какой тип написал, тот и будет
C++
1
int sum;
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,539
24.04.2014, 22:18     Преобразования типов. Определить тип переменной #3
dicros, а ты пробовал запустить данный пример?
Первое: ошибка символа в 7 строке, там знак деления перевёрнут.
Второе: чтоб увидеть результат надо задержать экран функцией getch(); (её написать перед return 0) и заголовочный файл #include <conio.h> для её работы. Ну русские символы я опущу - сам нагуглиш.

Результат выполнения: в первой строке будет число "211509811", а во второй та цифра которая была указана.
В общем то не по теме, но я ответа не знаю по поводу данного вопроса, как то не пользовался..
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
24.04.2014, 22:41  [ТС]     Преобразования типов. Определить тип переменной #4
villu, спасибо буду знать теперь.

Izual, пример запускать пробовал раньше, а щас только для примера переписал поэтому на ошибку не обращай внимания.

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

Я делаю вот так

setlocale(0, "Rus"); //Это для поддержки русского языка
system("pause"); // Для задержки


Может есть какие другие способы более универсальные и правильные?
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,539
25.04.2014, 00:29     Преобразования типов. Определить тип переменной #5
dicros, тип данных естественно останется тем который заявлен, однако результат вычисления разный - это заставляет задуматься над способом приминения.

Цитата Сообщение от dicros Посмотреть сообщение
лучше реализовать
Для чего лучше?.. Не забегайте в перёд, всему своё время, придёт время и если это нужно будет, то оно проявит себя. (аналогия с пословицей: "Если гора не идёт к Магомеду, Магомед идёт к горе")

Пользуйся тем что работает, этого будет достаточно. Оптимизация будет когда она будет необходимо и когда придёт знание и толчок к постижению этого знания.
DrOffset
6922 / 4115 / 942
Регистрация: 30.01.2014
Сообщений: 6,910
25.04.2014, 00:40     Преобразования типов. Определить тип переменной #6
Цитата Сообщение от dicros Посмотреть сообщение
В результате у переменной sum какой тип данных будет?? int или double.
Результат выражения будет double. Потом будет автоматическое преобразование к int, обрезка дробной части. В переменной sum будет целое число.
Если взять более интересный пример,
C++
1
2
int var1=10;
int sum = static_cast<double>(var1)*0.01;
в sum будет 0.
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
25.04.2014, 00:51  [ТС]     Преобразования типов. Определить тип переменной #7
Izual, дело в том что не хочется привыкать к неправильному написанию, вы то уже много этим занимаетесь и точно знаете какой из способов более универсальный и правильный и можете дать совет так сказать.



DrOffset, да спасибо я уже понял, просто когда читал меня смутили вот эти строки из книжки

Давайте рассмотрим действия компилятора, когда он встречает выражения со смешанными типами. Каждый тип данных можно условно считать "ниже" или "выше" по отношению к другим типам. Иерархия типов данных приведена ниже:

long double высший
double
float
long
int
short
char низший



Арифметические операции, подобные + и *, действуют следующим образом: если их операнды имеют различные типы, то операнд с более "низким" типом будет преобразован к более "высокому" типу.
вот я и подумал раз у double приоритет выше может быть он влияет и на тот тип данных который за скобками.
DrOffset
6922 / 4115 / 942
Регистрация: 30.01.2014
Сообщений: 6,910
25.04.2014, 00:58     Преобразования типов. Определить тип переменной #8
Цитата Сообщение от dicros Посмотреть сообщение
вот я и подумал раз у double приоритет выше может быть он влияет и на тот тип данных который за скобками.
Он влияет на результат выражения. Т.е. если один из операндов double, то и результат тоже будет double.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2014, 01:22     Преобразования типов. Определить тип переменной
Еще ссылки по теме:

преобразования типов - C++
void foo(int i) {...} string str(&quot;abcdef&quot;); //..... enum BoardLetter {a = 0, b, c, d, e, f, g, h}; foo( ...

Преобразования типов - C++
Доброго времени суток. Заранее извиняюсь если подобная тема уже была,но найти я не смог. Встал следующий вопрос. Можно ли,обращаясь к...

Объяснить преобразования типов - C++
Добрый день, можете объяснить последовательность дейстий, что происходит в ходе преобразований. unsigned short x = 1; cout &lt;&lt;...

Неявные преобразования типов - C++
Недавно начал изучать С++. Решал задачу и наткнулся на проблему, что при выводе переменной, выдает значение 0. Не понимаю, как сам...

операторы преобразования типов - C++
что но не пойму сам принцип работы опреаторов преобразования.. вот к примеру: class Cat{ public: Cat(){itsAge=192;} ...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6422 / 3061 / 303
Регистрация: 04.12.2011
Сообщений: 8,344
Записей в блоге: 3
25.04.2014, 01:22     Преобразования типов. Определить тип переменной #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от dicros Посмотреть сообщение
вот я и подумал раз у double приоритет выше может быть он влияет и на тот тип данных который за скобками.
double шире. То есть, расширительное преобразование приведёт к тому, что целое участвующее в арифметической операции с double, будет автоматически (неявно) преобразовано к double. Это значит, что:
C++
1
2
3
int a=5;
int b=6;
double c = (double)a + b;
переменная a будет явно преобразована к double, а переменная b будет преобразована к double неявно. То есть, за скобками будет преобразование тоже. Это потому, что операция сложения "+" определена только для одинаковых встроенных типов. А поскольку, заботясь о сохранении точности, компилятор проводит расширительное преобразование, то он и вынужден сделать именно так. Но в ваших примерах в левой части int, поэтому сначала операнды правой части будут преобразованы к double и результат выражения справа будет double, но при присвоении переменной левой части произойдет обратное преобразование (сужающее) double к int. Компилятор вынужден это сделать, так как ожидается int. Но если не отключены соответствующие предупреждения, он предупредит о том, что преобразование может привести к потере информации.
Yandex
Объявления
25.04.2014, 01:22     Преобразования типов. Определить тип переменной
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru