Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
353 / 34 / 7
Регистрация: 02.07.2008
Сообщений: 311
1

Перегрузка операторов

16.10.2009, 14:22. Показов 1055. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Помогите разобраться с перегрузкой операторов.
Хочу реализовать класс который будет представлять тип double с определенной точностью. Еще нужна возможность преобразования в тип int и double.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
template <unsigned int precision>
class SDouble
{
public:
    // uninitialized
    SDouble ();
    // construction
    SDouble (double fX);
    SDouble (int fX);
    //copy constructor
    SDouble (const SDouble& rkSD);
    
    // assignment
    inline SDouble& operator= (const SDouble&);
    
    // comparison
    bool operator== (const SDouble&) const;
    bool operator!= (const SDouble&) const;
    bool operator<  (const SDouble&) const;
    bool operator<= (const SDouble&) const;
    bool operator>  (const SDouble&) const;
    bool operator>= (const SDouble&) const;
    
    //unary operations
    inline SDouble operator-() const;
    inline SDouble operator+() const;
    
    //arithmetic operations
    inline SDouble operator+ (const SDouble&) const;
    inline SDouble operator- (const SDouble&) const;
    inline SDouble operator* (const SDouble&) const;
    inline SDouble operator/ (const SDouble&) const;
    
    // arithmetic updates
    inline SDouble& operator+= (const SDouble&);
    inline SDouble& operator-= (const SDouble&);
    inline SDouble& operator*= (const SDouble&);
    inline SDouble& operator/= (const SDouble&);
    
    //arithmetic operations 
    template <unsigned int precision>
    friend SDouble<precision> operator+ (double s_value, const SDouble<precision>&);
    template <unsigned int precision>
    friend SDouble<precision> operator- (double s_value, const SDouble<precision>&);
    template <unsigned int precision>
    friend SDouble<precision> operator* (double s_value, const SDouble<precision>&);
    template <unsigned int precision>
    friend SDouble<precision> operator/ (double s_value, const SDouble<precision>&);
    
    //type cast
    operator int();
    operator double();
    
    //value
    double getValue() const;
private:
    
    double supp_val_precision(double) const;
    
private:
    double m_Value;
};
При попытке выполнить код:

C++
1
2
    SDouble<4> sd(7.12);
    SDouble<4> sdr =-sd + 5.0;
Получаю:

Код
1>d:\programming\freelance\mathematic_library\release\my_new_library001\my_new_library\main.cpp(443) : error C2666: 'SDouble<degree>::operator +' : 3 overloads have similar conversions
1>        with
1>        [
1>            degree=4
1>        ]
1>        d:\programming\freelance\mathematic_library\release\my_new_library001\my_new_library\sdouble.hpp(39): could be 'SDouble<degree> SDouble<precision>::operator +(const SDouble<precision> &) const'
1>        with
1>        [
1>            precision=4
1>        ]
1>        or       'built-in C++ operator+(int, double)'
1>        or       'built-in C++ operator+(double, double)'
1>        while trying to match the argument list '(SDouble<precision>, double)'
1>        with
1>        [
1>            precision=4
1>        ]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2009, 14:22
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора...

Перегрузка операторов
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; class matrix { protected: int **mass; int n;...

Перегрузка операторов
Реализуйте класс CTime , моделирующий время суток ( количество часов , минут и секунд). Каркас...

1
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
16.10.2009, 21:32 2
Ты понаопределял слишком много операторов, и компилятор не знает, который выбрать. Попробуй отказаться от операторов неявного преобразования в int и double, заменив их функциями вроде AsInt() и AsDouble().
0
16.10.2009, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2009, 21:32
Помогаю со студенческими работами здесь

Перегрузка операторов << и >>
Добрый вечер! Задание состоит в следующем: необходимо изменить интерфейс методов Print и Read:...

C++ перегрузка операторов
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить...

Перегрузка операторов
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора...

Перегрузка операторов >>
доброго времени суток. не как не получаеться перегрузить операторы класса. в общем, есть массив...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru