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

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

Восстановить пароль Регистрация
 
like-nix
351 / 32 / 6
Регистрация: 02.07.2008
Сообщений: 311
16.10.2009, 14:22     Перегрузка операторов #1
Всем привет!

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

Код
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;
};
При попытке выполнить код:

Код
    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>        ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2009, 14:22     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов C++
C++ перегрузка операторов
Перегрузка операторов C++
Перегрузка операторов C++
перегрузка операторов C++
Перегрузка операторов с++ C++
C++ Перегрузка операторов
C++ Перегрузка операторов
Перегрузка операторов C++
Перегрузка операторов +=, -=, *= C++
C++ Перегрузка операторов
C++ Перегрузка операторов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1593 / 985 / 117
Регистрация: 27.09.2009
Сообщений: 1,901
Завершенные тесты: 1
16.10.2009, 21:32     Перегрузка операторов #2
Ты понаопределял слишком много операторов, и компилятор не знает, который выбрать. Попробуй отказаться от операторов неявного преобразования в int и double, заменив их функциями вроде AsInt() и AsDouble().
Yandex
Объявления
16.10.2009, 21:32     Перегрузка операторов
Ответ Создать тему
Опции темы

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