Помогите ,пожалуйста, реализовать близкую реализацию функции at(). У меня существует класс для хранения массива типа char и мне нужно реализовать at(). Понял, что настоящий at() ловит исключения. Именно с этим я и не могу справиться, помогите пожалуйста.
Код:
#pragma once
#include <iostream>
const int LIMIT = 100;
class TCharArray
{
private:
char element[LIMIT];
public:
TCharArray();
~TCharArray();
char& at(int n)
{
if (n < 0 || n >= LIMIT)
{
std::cout << "Error index!";
exit(1);
}
return element[n];
}
};
Не имеет смысла объявлять параметр функции at, как имеющий знаковый целочисленный тип.
"Настоящая" функция at не "ловит" исключения, а выбрасывает исключение, если указанный индекс выходит за пределы допустимого диапазона индексов.
Также лучше объявить константу LIMIT как член класса, так как это является характеристикой класса. Вы можете написать отдельную функцию-член класса, которая будет возвращать значение этой константы, как, например, max_length или capacity.
В вашем классе функция at может быть реализована, как показано ниже
#include <iostream>
#include <algorithm>
#include <stdexcept>
class TCharArray
{
private:
static const size_t LIMIT = 100;
char element[LIMIT];
public:
TCharArray()
{
std::fill( element, element + LIMIT, char() );
}
const char & at( size_t n ) const
{
if ( n >= LIMIT ) throw std::out_of_range( "Invalid index" );
return element[n];
}
char & at( size_t n )
{
if ( n >= LIMIT ) throw std::out_of_range( "Invalid index" );
return element[n];
}
};
int main()
{
TCharArray s;
try
{
s.at( 100 ) = 'A';
}
catch ( std::exception &e )
{
std::cout << e.what() << std::endl;
}
}
Вывод программы на консоль:
Invalid index
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости