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

Исключительные ситуации в классах - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шифрование символов в файле http://www.cyberforum.ru/cpp-beginners/thread604554.html
День добрый! Проблема такова: Есть файл содержащий исходный набор символов(текст, строки и т.д.). нужно составить программу для шифрования каждого символа исходного файла методом добавления определенного ключа, записать эту последовательность в другой файл, и дешифровать сообщение в третий файл. Есть исходный код на Delphi. program Crypto; {$APPTYPE CONSOLE}
C++ Класс "окружность" Написать программу работы с окружностями. Окружность является объектом класса. Память под окружность должна выделяться динамически (с помощью new). Должны быть определены деструктор и следующие конструкторы: · Конструктор по умолчанию создает нулевую окружность; · Конструктор, задающий окружность по центру и радиусу; · Копирующий конструктор. ... http://www.cyberforum.ru/cpp-beginners/thread604520.html
C++ Матрицы: сложения двух матриц (двумерных массивов)
Необходимо написать программу сложения двух матриц (двумерных массивов) на языке СИ++. Даны матрицы A и B. Надо их объявить и заполнить случайным образом через random, распечатать, получить матрицу C, которая состоит из сумм элементов массива A и массива B (C = A + B). Результат распечатать. Подсчитать сумму элементов массива C и распечатать. По поиску что-то не нашёл подобного.
C++ Множества
Дан текст на английском языке, который заканчивается точкой. В тексте удалить все гласные буквы, а согласные заменить на прописные.
C++ Текстовые файлы http://www.cyberforum.ru/cpp-beginners/thread604498.html
Дан файл, содержащий текст на русском языке. Выбрать из него те символы, которые встречаются в нем только один раз, в том порядке, в котором они встречаются в тексте.
C++ куда воткнуть файл res? есть файл res и его надо как-то подключить . куда его положить? в папку проекта? в документации написано в "стандартная библиотека (папка) С++ Visual Studio/VC98/ Projects" но у меня нет папки projects в папке vc98.. подробнее

Показать сообщение отдельно
DEMON51
0 / 0 / 0
Регистрация: 13.06.2012
Сообщений: 5

Исключительные ситуации в классах - C++

13.06.2012, 16:11. Просмотров 454. Ответов 10
Метки (Все метки)

Добрый день.
Нужна помощь, есть класс дробей. В нём я сделал исключительные ситуации для переполенения и для деления на 0. Но надо чтобы try-catch были в функции main, а в классе только throw. Как это сделать?
Код
//class.h-------------------------------------------------------------

#ifndef _DROB_H
#define _DROB_H
#include <math.h>
#include <iostream.h>

class DrobException{             //Класс для исключительных ситуаций
public:
  char mes[256];
  DrobException(char* m) {strcpy(mes, m);}
};


template <class Type>
class drob //класс дробей
{   Type chesl, znam; //числитель и знаменатель
	public:

	drob (Type, Type);


	drob (drob &c)
	{
		chesl = c.chesl;
		znam = c.znam;
	}

	void sokrachenie();     //сокращение дроби

	drob operator*(drob <Type>);  //переопределение *

	drob operator/(drob <Type>);  //переопределение /

	drob operator+(drob <Type>);  //переопределение +

	drob operator-(drob <Type>);  //переопределение -

	~drob () {}

	friend ostream &operator<<(ostream &out, const drob &k) // переопределение оператора <<
	{ if (k.znam==1)
		  out << k.chesl;
	   else
	out << k.chesl << '/' << k.znam;
	return out;
  }



};
template <class Type>
drob <Type>::drob (Type ch=1, Type zn=1)
	{ chesl = ch;
	  znam = zn;
	   try                                               // деление на 0
   { if (znam==0) {
	 throw DrobException("\nError: Devision by zero");
	}
   }
   catch (DrobException e)
   {
	 cout<<e.mes<<endl;
	 //getchar();
	 //exit (1);
   }

   try {                                                   //  переполнение
		 if ((chesl>(sizeof(Type)*8))||(znam>(sizeof(Type)*8))||(chesl<-(sizeof(Type)*8))||(znam<-(sizeof(Type)*8))){
		 throw DrobException ("\nError: Overflow"); }
   } catch (DrobException e) {
   cout<<e.mes<<endl;
	// getchar();
	 //exit (1);
   }

	}

template <class Type>
void drob <Type>::sokrachenie()
 { int a=abs(chesl);
   int b=znam;
  while(b)
	 b^=a^=b^=a%=b;
  int n=abs(a);
  chesl/=n;
  znam/=n;
 }


 template <class Type>
 drob <Type> drob <Type>::operator*(drob <Type> a)
 {drob e;
  //double x=1.*chesl * a.chesl;
  e.chesl = chesl * a.chesl;
  e.znam = znam * a.znam;
  e.sokrachenie();
  return e;
 }

 template <class Type>
 drob <Type> drob <Type>::operator/(drob <Type> a)
 { drob c;
  c.chesl = chesl * a.znam;
  c.znam = znam * a.chesl;
  c.sokrachenie();
  return c;
 }

 template <class Type>
 drob <Type> drob <Type>::operator+(drob <Type> a)
 { drob t;
   t.chesl = a.chesl * znam + chesl * a.znam;
   t.znam = a.znam * znam;
   t.sokrachenie();
	return t;
 }

 template <class Type>
 drob <Type> drob<Type>::operator-(drob <Type> a)
 { drob f;
 f.chesl = chesl * a.znam - znam * a.chesl;
 f.znam = a.znam * znam;
 f.sokrachenie();
 return f;
 }

 #endif


//main.cpp -----------------------------------------------------------

#include "class.h"
int main()
{   drob <short> a(2,4);
  cout << a <<endl;
  a.sokrachenie();
  cout << "Reduction: "<< a << endl;
  drob <short> b(1,3);
  b.sokrachenie();
  cout <<"\n"<< b << endl;
  drob <int> q(3,3);
  cout << "\n"<< q << endl;
  q.sokrachenie();
  cout << "Reduction: "<< q << endl;
  drob <short> c, d, e, f;
  c=a+b;
  d=a*b;
  e=a/b;
  f=a-b;
  drob <int> t(2,0);
  //cout << t << endl;
  drob <int> h(2,10000000000000);
  //cout << h << endl;
  drob <int> u(32655896, 2);
  //cout << u << endl;
  cout << "\nArithmetic operations:" << endl;
  cout << a<< " / " << b << " = " << e << endl;
  cout << a<< " + "<< b<< " = " << c << endl;
  cout << a<< " * " << b<< " = " << d << endl;
  cout << a<< " - " << b<< " = " << f << endl;
  getchar();
	return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru