Я новичок в исключениях, и я попытался улучшить решение вопроса, который был у одного из моих друзей на собеседовании.
Моего друга попросили создать программу, которая получит 2 массива и найдетчисло, которое, если мы разделим его на члены первого массива, мы получим соответствующий остаток второго массива.
Могу ли я использовать std :: exception без каких-либо наследуемых классов в этом случае?
ФАЙЛ СРР
#include <iostream>
#include <exception>
#include "FindNumber.h"
Finder::Finder() : m_num(0)
{}
int Finder::FindFirst(int* _divided, int* _leftOver, int _size)
{
int indx = 0;
while(indx < _size)
{
if (!_divided[indx])
{
throw("Can not divide by zero!!");
}
if (m_num % _divided[indx] != _leftOver[indx])
{
++m_num;
FindRest(_divided, _leftOver, _size);
indx = 0;
}
++indx;
}
return m_num;
}
int Finder::FindRest(int* _divided, int* _leftOver, int _size)
{
int indx = 0;
for(;;)
{
if (!_divided[indx])
{
throw("Can not divide by zero!!");
}
if (m_num % _divided[indx] != _leftOver[indx])
{
++m_num;
}
else
{
break;
}
}
return m_num;
}
ИСПЫТАТЕЛЬНЫЙ БЛОК
#include <cstdio>
#include <iostream>
#include "FindNumber.h"
#include "mu_test.h"
#define SIZE 5
/****************************** FN_check1 ******************************/
UNIT(FN_check1)
int divided [SIZE] = {0, 4, 5, 6, 7};
int leftOver [SIZE] = {2, 0, 3, 2, 1};
Finder find1;
try
{
ASSERT_THAT(6 != find1.FindFirst(divided, leftOver, SIZE));
ASSERT_THAT(8 == find1.FindFirst(divided, leftOver, SIZE));
}
catch(std::exception& e)
{
std::cout << e.what();
}
END_UNIT
/****************************** FN_check2 ******************************/
UNIT(FN_check2)
int divided [SIZE] = {6, 12, 8, 10, 7};
int leftOver [SIZE] = {0, 0, 4, 2, 5};
Finder find1;
ASSERT_THAT(6 != find1.FindFirst(divided, leftOver, SIZE));
ASSERT_THAT(12 == find1.FindFirst(divided, leftOver, SIZE));
std::cout << find1.FindFirst(divided, leftOver, SIZE) << std::endl;
END_UNIT
TEST_SUITE(FindNumber_test)
TEST(FN_check1)
TEST(FN_check2)
END_SUITE
Заранее спасибо ...