Closed mitya-y closed 1 year ago
Можно так
class A
{
public:
class AInt
{
friend class A;
public:
operator int() const
{
return value_;
}
private:
AInt(int value)
: value_{ value }
{}
AInt& operator = (int value)
{
value_ = value;
return *this;
}
private:
int value_;
};
A() : x(0)
{}
A(int n)
: A()
{
x = n;
}
AInt x;
};
int main()
{
A a;
int x = a.x;
a.x = 10; // ошибка компиляции
return 0;
}
Но вообще сама идея выглядит как костыль. Здесь будут уместнее property
Идея по добавлению property в язык ранее обсуждалась https://github.com/cpp-ru/ideas/issues/522
Согласен, очень похоже на идею с property https://github.com/cpp-ru/ideas/issues/58, предлагаю продолжить обсуждение там
Новое служебное слово для объявления переменых в классе, которые доступны как константы вне класса, и как обычные не const в методах самого класса.
Данное решение будет очень удобным для реализации SOLID идеалогии. Сейчас програмисты вынуждены писать так:
class A { int x; ... public: const int & GetX( void ); } ... A a; int x = a.GetX();
На обертку каждой переменной класса в больших проектах уходит большое количество времени. Намного удобнее написать одно служебное слово (например extconst (external const))
class A { public: extconst int x; ... A( int n) { x = n; } } ... A a; int x = a.x; a.x = 10; // ошибка компиляции