Форум: Форум C++Разное
Новые темы: 00
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перегрузка операторов
 
 автор: like-nix   (16.10.2009 в 14:24)   письмо автору
 
 

Всем привет!

Помогите разобраться с перегрузкой операторов.
Хочу реализовать класс который будет представлять тип 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> ]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования