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

Приведение пользовательских типов - C++

Восстановить пароль Регистрация
 
lotos580
1 / 1 / 1
Регистрация: 25.05.2012
Сообщений: 59
15.02.2014, 12:37     Приведение пользовательских типов #1
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
32
33
34
35
36
37
#include <iostream>
using namespace std;
 
class cl
{
    friend cl operator+(cl& s2);
public:
    cl(int d = 0, int c = 0)
    {
        dollars = d;
        cents = c;
        while(cents > 100)
        {
            cents -= 100;
            dollars++;
        }
    }   
    unsigned int dollars;
    unsigned int cents;
};
 
cl operator+(int a, cl& s2)
{
    unsigned int c = a + s2.cents;
    unsigned int d = a + s2.dollars;
    cl object(d, c);
    return object;
}
 
int main()
{
    cl s(0, 5);
    cl d = 50 + s;
    cout << d.cents;
    system("pause");
    return 0;
}
Нужно привести в 22 строке, тип int к cl&, как это сделать правильно, чтобы не переписывать все возможные варианты сложения, например: cl operator+(int a, cl& s2), cl operator+(cl& s2, int a) и т.д. В книге написано, но сделать не получается.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 12:37     Приведение пользовательских типов
Посмотрите здесь:

C++ Приведение типов?
Приведение типов C++
C++ Обработка исключений в классах для пользовательских типов
C++ Преобразование пользовательских типов
C++ Создание пользовательских типов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
15.02.2014, 12:52
  #2

Не по теме:

lotos580, не надо ничего переводить, просто передавайте в метод обьект класса вместо int'а

C++
#include <iostream>
using namespace std;
 
class cl
{
    friend cl operator+(cl & s2);
public:
    cl(int d = 0, int c = 0)
    {
        dollars = d;
        cents = c;
        while(cents > 100)
        {
            cents -= 100;
            dollars++;
        }
    }
    unsigned int dollars;
    unsigned int cents;
};
 
cl operator+(cl &s1, cl &s2)
{
    cl object(0, 0);
    object.cents   = s1.cents + s2.cents;
    object.dollars = s1.dollars + s2.dollars;
    return object;
}
 
int main()
{
    cl s1(0, 5);
    cl s2(0, 50);
 
    cl d = s1 + s2;
 
    cout << d.cents;
 
    return 0;
}

lotos580
1 / 1 / 1
Регистрация: 25.05.2012
Сообщений: 59
15.02.2014, 13:01  [ТС]     Приведение пользовательских типов #3
Этот способ понятен, не подскажете как из всего этого сделать неявное преобразование как тут?
C++
1
cl d = 50 + s;
с приведением типов
C++
1
cl operator+(cl &s1, cl &s2)
или это полный бред, который по сути не пригодится?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
15.02.2014, 13:12     Приведение пользовательских типов #4
У вас уже есть конструктор, который может быть вызван с одним аргументом типа int, поэтому int может быть неявно приведен к cl:
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
32
33
34
#include <iostream>
 
class cl
{
public:
    cl(int d = 0, int c = 0)
    {
        dollars = d;
        cents = c;
        dollars += cents / 100;
        cents %= 100;
    }
    unsigned int dollars;
    unsigned int cents;
};
 
cl operator+(const cl& s1, const cl& s2)
{
    cl object(0, 0);
    object.cents   = s1.cents + s2.cents;
    object.dollars = s1.dollars + s2.dollars;
    return object;
}
 
int main()
{
    cl s1(0, 5);
 
    cl d = s1 + 50;
 
    std::cout << d.dollars << '.' << d.cents << std::endl;
 
    return 0;
}
Добавлено через 2 минуты
Обратить внимание нужно на несколько вещей:
1. Из класса было убрано объявление несуществующей дружественной функции.
2. В операторе+ аргументы передаются по константным ссылкам.
3. В конструкторе был убран цикл.
4. В текущей версии после сложения количество центов может оказаться больше 100 - не забудьте поправить.
Yandex
Объявления
15.02.2014, 13:12     Приведение пользовательских типов
Ответ Создать тему
Опции темы

Текущее время: 08:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru