Указатель на класс с перегрузкой оператора индексации массива - PullRequest
0 голосов
/ 07 мая 2018

У меня есть класс, который перегружен оператор индекса массива []. Теперь мне нужно создать указатель на этот класс. Как я могу использовать оператор индекса [], используя указатель на класс. Следующий код работает нормально, но если я откомментирую basicVector * a = новую строку basicVector (10) и поставлю -> вместо . , я получить ошибки.

Пожалуйста, смотрите эту ссылку для настроек и кода компилятора.

#include <iostream>       // std::cout
#include <queue>          // std::queue
#include <string>
#include <string.h>
#include <stdint.h>
#include <vector>

using namespace std;
class basicVector
{
private:
    uint32_t array_size;
    uint8_t * array;
public:
    basicVector(uint32_t n);
    ~basicVector();

    uint32_t size();
    uint8_t * front();
    uint8_t& operator[](uint32_t i);
};

basicVector::basicVector(uint32_t n)
{
    array_size = n;
    array = new uint8_t[n];
}

basicVector::~basicVector()
{
    delete [] array;
}

uint32_t basicVector::size()
{
    return array_size;
}

uint8_t * basicVector::front()
{
    return array;
}

uint8_t& basicVector::operator[](uint32_t i)
{
    return array[i];
}

int main ()
{   //basicVector * a = new basicVector(10);
    basicVector a(10);
    cout <<a.size()<<endl;

    for(uint8_t i=0; i < a.size(); i++)
    {   a[i] = i+50;    //how to do this correctly when "a" is pointer?
    }

    uint8_t * b = &a[3];    //how to do this correctly when "a" is pointer?
    *b = 45;

    for(uint32_t i=0; i < a.size(); i++)
    {   cout<<a[i]<<endl;   //how to do this correctly when "a" is pointer?
    }
    return 0;
}

1 Ответ

0 голосов
/ 07 мая 2018

Со следующей декларацией:

basicVector *a = new basicVector(10);

Вы можете разыменовать указатель (предпочтительно):

uint8_t n = (*a)[5];

Или позвоните оператору, используя синтаксис operator:

uint8_t n = a->operator[](5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...