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だからダメ!」となっているのが
面白かったです