Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

04.11.2011, 20:32. Просмотров 2269. Ответов 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; 
...
Зарание спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 20:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение типов? (C++):

Приведение типов. - C++
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix...

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

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

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

Приведение типов - C++
в GUI ни int str = static_convert&lt;int&gt;(Edit1-&gt;Text) ни int str = (int)Edit1-&gt;Text не приводит : E2034 Cannot convert...

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

27
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
04.11.2011, 23:17  [ТС] #16
Цитата Сообщение от BRcr Посмотреть сообщение
k.kilometer=k.kilometer-t.kilometer;
k.mili=k.mili-t.kilometer;
Тут ошибка(извеняюсь) место '-' стоять должен '+'
0
prazuber
110 / 110 / 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;
        // ...
}
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,134
04.11.2011, 23:31 #18
PraZuBeR
Что вы в этом плохое видите? То, что const? Так а static объекты нельзя что ли изменять? Можно. А автор захотел, чтобы нельзя было.
Или то, что private?
0
prazuber
110 / 110 / 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
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,134
04.11.2011, 23:39 #20
Понял. Действительно, надо отдельно от класса инициализировать.
0
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
04.11.2011, 23:46  [ТС] #21
PraZuBeR,
1
Миниатюры
Приведение типов?  
Chelioss
04.11.2011, 23:50
  #22

Не по теме:

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

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