Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2012, 15:53   #1
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию Ошибка при перегрузке операторов.

Здравствуйте! Возникла необходимость создать свой класс-обертку для работы с большими числами.
Пример рабочий:
Код:
IntGmp s((long)20); IntGmp q((long)30);
s=q=s+s; q.Print(); s.Print();
но если же написать
Код:
s=q=s+s+s;
то возникает исключительние. в чем может быть ошибка ?

Код во вложениии.
Исключение : Необработанное исключение в "0x1003317f (mpir.dll)" в "Обертка.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcdd1".
Вложения
Тип файла: txt IntGmp.txt (1.1 Кб, 134 просмотров)
Тип файла: txt IntGmp_h.txt (354 байт, 13 просмотров)

Последний раз редактировалось bill; 25.01.2012 в 15:55.
bill вне форума Ответить с цитированием
Старый 26.01.2012, 21:17   #2
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

IntGmp.h
Код:
#include "mpir.h"
class IntGmp
{
public:
   	 IntGmp& operator=(const mpz_t&);
	 IntGmp& operator=(const IntGmp&);
	
	 IntGmp& operator +(long);
	 IntGmp& operator +(mpz_t&);
	 IntGmp& operator +(const IntGmp&);
	 void Print();
	IntGmp(bool);
	IntGmp(mpz_t&);
	IntGmp(long);
	~IntGmp(void);
protected:
	mpz_t number;
	IntGmp*  bufer;
};
INtGmp.cpp
Код:
#include "StdAfx.h"
#include "IntGmp.h"
#include "mpir.h"

 IntGmp&  IntGmp::operator=(const mpz_t& val) {mpz_set(number,val); return *this;};
 IntGmp&  IntGmp::operator=(const IntGmp& val) {mpz_set(number,val.number); return *this;};


 IntGmp& IntGmp::operator+(long next)
{
	mpz_set_si(bufer->number,next);
	mpz_add(bufer->number,number,bufer->number);
	return *bufer;
}

 IntGmp& IntGmp::operator+(const IntGmp& next)
{
	gmp_printf("%Zd\n",bufer->number);
	mpz_add(bufer->number,number,next.number);
	return *bufer;
}

 IntGmp& IntGmp::operator+(mpz_t& param)
{
	mpz_add(bufer->number,number,param);
    return *bufer;
}

void IntGmp::Print() 
{
	gmp_printf("%Zd\n",number);	
};

//////// Constructors and Destructors ////////////
IntGmp::IntGmp(bool param=true){mpz_init(number);
	//mpz_init(bufer);
	if (param) bufer=new IntGmp(false);
}

IntGmp::IntGmp(mpz_t& num) 
{
	mpz_init(number);mpz_set(number,num);
	bufer=new IntGmp(false);
}

IntGmp::IntGmp(long num) {
	mpz_init(number);mpz_set_si(number,num);
	bufer=new IntGmp(false);
}

IntGmp::~IntGmp(void) { }
bill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при перегрузке << и >> DartDayring Visual C++ 8 07.12.2020 13:42
Программа на языке С с использованием условных операторов и операторов цикла. Valentin Pirgach Помощь студентам 0 17.10.2011 20:16
Перегрузка операторов С++. Ошибка в реализации перегрузки Angry_johnny Помощь студентам 0 25.05.2011 15:10
Типы аргументов при перегрузке функций Arkuz Общие вопросы C/C++ 4 24.02.2009 01:16
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15