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

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

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

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

15.02.2014, 12:37. Просмотров 443. Ответов 3
Метки нет (Все метки)

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

Создание пользовательских типов - C++
помогите пожалуйста написать программу. (необходимо написать с применением операторов &quot;printf/scanf&quot;); Сведения об экзамене содержат...

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

Преобразование пользовательских типов - C++
Здравствуйте. Помогите с одним вопросом, это пример из книги Лафоре ООП С++, не могу разобраться как работают функции int getHrs() const ...

Шаблон для пользовательских типов данных - C++
В общем имееются две функции. Одна принимает тип данных string другая char. Функции выполняют одну и ту же задачу. Вопрос как сделать...

Возможно ли переопределение операторов для пользовательских типов? - C++
Собственно преследуемая цель: Определить свой тип int - myint. Переопределить для него операторы как надо. Ну, например, надо мне при...

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

3
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;
}

0
lotos580
1 / 1 / 1
Регистрация: 25.05.2012
Сообщений: 60
15.02.2014, 13:01  [ТС] #3
Этот способ понятен, не подскажете как из всего этого сделать неявное преобразование как тут?
C++
1
cl d = 50 + s;
с приведением типов
C++
1
cl operator+(cl &s1, cl &s2)
или это полный бред, который по сути не пригодится?
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
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 - не забудьте поправить.
1
15.02.2014, 13:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2014, 13:12
Привет! Вот еще темы с ответами:

Приведение типов - C++
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример: newType_cast&lt;T&gt;(“123”); ...

Приведение типов - C++
Есть код вызова метода: obj.func(char a, char b) сам метод: void func(char a, char b) { int i = (int)a, int j = (int)b; В...

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

Приведение типов? - C++
Подскажите, пожалуйста что происходит. Не понимаю почему такой код работает. .h class Km { private: static const...


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

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

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