readonlyなpublicメンバ変数

普通のクラス設計でpublicメンバ変数は定義しないと思いますが
座標系のクラスを作っているときにいちいちgetterから呼び出すのに
変な違和感を覚えます

readonlyなpublicメンバが欲しいです

C#ではpublic readonly int x;とかpublic int x{get; private set;}やれば作れます

ただ、C++でもreadonlyなpublicメンバは割と簡単に作れます
(設計上好ましくないかもしれないのかもしれませんが)

#include <iostream>
    
class coord
{
  public:
    const int a,b; // menber
    
    coord(int a_,int b_): // ctor
        a(a_),
        b(b_)
    {}
  private:
    void set_a(int a_) // setter
    { const_cast<int&>(a) = a_; }
    
    void set_b(int b_) // setter
    { const_cast<int&>(b) = b_; }

  public:
    void change(int a_,int b_)
    { set_a(a_); set_b(b_); }
};

using namespace std;

auto main() -> int
{
    coord foo(1,2); 
    
    cout << "foo.a=" << foo.a << endl;
    cout << "foo.b=" << foo.b << endl;
    
    cout << "---------------" << endl;
    
    //foo.a = 5;     // Compile Error
    foo.change(5,4);  // OK!
        
    cout << "foo.a=" << foo.a << endl;
    cout << "foo.b=" << foo.b << endl;
}

http://sc.yutopp.net/entries/533fcf6e43f75e66ba00018c

ちなみに、compile-errorのメッセージも
const_memberだからダメ!」ではなく
「readonly_menberだからダメ!」となっているのが
面白かったです