Реализация функции at для char C++

291
01 марта 2017, 22:01

Помогите ,пожалуйста, реализовать близкую реализацию функции 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];
    }
}; 
Answer 1

Не имеет смысла объявлять параметр функции 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
READ ALSO
uncaught target signal 11 в qemu для arm при сборке с помощью arm-none-eabi-g++

uncaught target signal 11 в qemu для arm при сборке с помощью arm-none-eabi-g++

Мне необходимо скомпилировать и запустить простейший код на C++ под ARMПытаюсь сделать:

291
Повторное удаление указателя

Повторное удаление указателя

При вызове конструктора копий указатели ссылаются на один и тот же указательИ при вызове деструктора повторное удаление указателя

249
Тривиальное хеширование [требует правки]

Тривиальное хеширование [требует правки]

Доброго времени суток! Можете привести пример тривиального хеширования? В интернете не смогла найти никакой понятной информации

570
Как изменить разрешение картинки RGB в буфере?

Как изменить разрешение картинки RGB в буфере?

Скриншот экрана хранится в буфере в виде байт RGBНужно независимо от его исходных размеров привести его к разрешению 1280х720

312