Использование свойств в С++

92
28 мая 2021, 16:50

В С++ для атрибутов класса можно задавать свойства, шаблон определения которых -

__declspec( property( get=get_func_name, put=put_func_name ) ) declarator

Есть класс, суть которого - работа с координатами

class Object
{
public:
    __declspec(property(get = getX, put = putX)) unsigned x;
    __declspec(property(get = getY, put = putY)) unsigned y;
private:
    unsigned getX() const { return _x; }
    unsigned getY() const { return _y; }
    void     putX(unsigned x) { _x = x; }
    void     putY(unsigned y) { _y = y; }
    unsigned _x, _y;
};

И при попытке использовать его

int main()
{
    Object a;
    a.x = 0;
}

получаю ошибку

"Object::putX: невозможно обратиться к private-члену".

Если сделать методы публичными, ошибка пропадает, как и часть мотивации использовать свойства: с таким же успехом можно использовать и сами методы. Есть вариант избежать ошибки, оставив методы, как и атрибуты, недоступными в дальнейшей работе с классом?

READ ALSO
Как обратиться к другому слоту Qt

Как обратиться к другому слоту Qt

Пытаюсь в конструкторе B вызвать слот A::toExit()Как исправить ошибку?

86
С помощью чего лучше создать графический вывод бинарного файла(C++, QT)?

С помощью чего лучше создать графический вывод бинарного файла(C++, QT)?

Изначально есть бинарный файлМне полностью известна его структура

185
Как избежать TLE?

Как избежать TLE?

Найдите количество правильных несократимых дробей, не превосходящих X, знаменатель которых не превосходит NОграничения: 2 <= N <= 100000

74