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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
#1

Приведение типов? - C++

04.11.2011, 20:32. Просмотров 2158. Ответов 27
Метки нет (Все метки)

Подскажите, пожалуйста что происходит. Не понимаю почему такой код работает.
.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Km
{
private:
        static const double DIFFERENCE = 1.2;
        double kilometer;
        double mili;
 
public:
...
       friend void operator+=(Km & k, const Km & t); //<--
...
       
       friend std::ostream & operator<<(std::ostream & os, const Km & t);
};
.cpp
C++
1
2
3
4
5
6
7
...
     void operator+=(Km & k, const Km & t)
     {
            k.kilometer=k.kilometer-t.kilometer;
            k.mili=k.mili-t.kilometer;
     }
...
main
C++
1
2
3
4
5
6
7
8
9
10
...
    Km mili=50;
    Km km=20;
    
    km+=mili;                 //Вот тут все понятно
    cout << endl << km; 
    
    km+=10;   //А вот тут не понятно, у меня мысли только о автоматическом приведении типов
    cout << endl << km; 
...
Зарание спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 20:32     Приведение типов?
Посмотрите здесь:

Приведение типов - C++
В чем различие привидения типа (type)expression, от type(expression)?

Приведение типов - C++
Необходимо привязать адрес массива double по указателю к адресу структуры. Массив сам создан в другом приложении. Если использовать...

Приведение типов - C++
В паскале можно привести типы: type ts = 0..9; chislo = array of ts; Как это сделать на С++?

Приведение типов - C++
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9. Результат переменной d = 10, это правильно. В чём подвох? int main() { ...

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

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

Приведение типов - C++
Как компилятор заставить адекватней приводить типы? (VS2012) Например: int a=-1; unsigned int b=5; if(a&gt;b){...}//Условие...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
04.11.2011, 23:17  [ТС]     Приведение типов? #16
Цитата Сообщение от BRcr Посмотреть сообщение
k.kilometer=k.kilometer-t.kilometer;
k.mili=k.mili-t.kilometer;
Тут ошибка(извеняюсь) место '-' стоять должен '+'
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
04.11.2011, 23:29     Приведение типов? #17
Извините что не по теме, но какой компилятор компилирует такое?
C++
1
2
3
4
5
class Km
{
        static const double DIFFERENCE = 1.2;
        // ...
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
04.11.2011, 23:31     Приведение типов? #18
PraZuBeR
Что вы в этом плохое видите? То, что const? Так а static объекты нельзя что ли изменять? Можно. А автор захотел, чтобы нельзя было.
Или то, что private?
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
04.11.2011, 23:34     Приведение типов? #19
То, что
error C2864: 'Km::DIFFERENCE' : only static const integral data members can be initialized within a class
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
04.11.2011, 23:39     Приведение типов? #20
Понял. Действительно, надо отдельно от класса инициализировать.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
04.11.2011, 23:46  [ТС]     Приведение типов? #21
PraZuBeR,
Миниатюры
Приведение типов?  
Chelioss
04.11.2011, 23:50
  #22

Не по теме:

KeyGen
Что за книга?

prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
04.11.2011, 23:52     Приведение типов? #23
KeyGen, это пруф того, что я прав?

Последнее предложение, в конце страницы:
Однако подобным образом невозможно хранить константу типа double.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
04.11.2011, 23:53     Приведение типов? #24
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Однако подобным образом невозможно хранить константу типа double.
Почему int можно, а double нет? Странно все это.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
04.11.2011, 23:57  [ТС]     Приведение типов? #25
PraZuBeR, Но работает же...
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
05.11.2011, 00:00     Приведение типов? #26
Chelioss, потому что static const члены считаются на этапе компиляции. Компилятор не может высчитывать вещественные числа. Кстати, именно static const, наравне с enum, широко используются в метапрограмировании на C++.

KeyGen, какой компилятор вы используете?
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
05.11.2011, 00:07     Приведение типов? #27
Цитата Сообщение от PraZuBeR Посмотреть сообщение
static const члены считаются на этапе компиляции.
Под них даже память не выделяется (если нигде не берется адрес), значения просто подставляются в места использования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2011, 00:11     Приведение типов?
Еще ссылки по теме:

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

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

Приведение типов - C++
Есть задача создать список с объектами у которых разные классы, но один базовый предок. Потом нужно перебрать список и если объект одного...

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

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...


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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
05.11.2011, 00:11     Приведение типов? #28
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Компилятор не может высчитывать вещественные числа.
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
Под них даже память не выделяется, значения просто подставляются в места использования.
Понятно. Хотя странно, ведь если они просто подставляются, то значит они как-то компилятором вычитались.
Yandex
Объявления
05.11.2011, 00:11     Приведение типов?
Ответ Создать тему
Опции темы

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