Пытаюсь реализовать разряженный массив и перегрузить для него оператор []. Читал, что можно перегрузить оператор на чтение и на запись (если это так, то как это сделать?)
В общем хочу сделать следующее:
Оператор [] для этого случая: cout<<array[0]<<endl;
тут только на вывод
И оператор [] для этого случая: array[0] = 1;
Тут оператор возвращает значение, которое можно и изменить и вывести
Для каждого случая хочу реализовать отдельную логику
Изменил на это:
int operator[](int index) const {
return dataArray[index];
}
int& operator[](int index) {
return dataArray[index];
}
Вызов в main:
cout << sp[0] << endl;
sp[0] = 1;
Что-то ничего лучше, чем вот такая жуть, в голову не приходит. И не писал бы, но раз уж в комментариях сказал А, надо говорить и Б...
#include <iostream>
#include <iomanip>
#include <map>
using namespace std;
class Array
{
struct proxy
{
int operator =(int v)
{
m[s] = v;
return v;
}
operator int()
{
if (m.count(s)) return m[s];
return 0;
}
proxy(Array*a, size_t s):m(a->m),s(s){}
map<size_t,int> &m;
size_t s;
};
public:
Array() = default;
proxy operator[](size_t s)
{
return proxy(this,s);
}
size_t count() { return m.size(); }
private:
map<size_t,int> m;
};
int main(int argc, const char * argv[])
{
Array a;
a[5] = 4;
for(int i = 0; i < 7; ++i) cout << a[i] << " ";
cout << "\n" << a.count() << endl;
}
Самому не нравится, так что, надеюсь, кто-то придумает что получше...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Начал недавно изучать C++ на windows, и сейчас мне очень интересно узнать от опытных людей - какие способы создания графического пользовательского...
Какое преимущество в билде от того, что header файлы будут включены вcpp, а не