コンストラクタで受け取ったポインタの内容を読み出したり変更したりするクラスを作りたいのですが
可能な場合に極力constを徹底しようとして壁に当たりました。

class A{
private:
char* ptr;
public:
A(char* p):ptr(p){}
void write(){*ptr=1;}
char read()const{return *ptr;}
};

void hoge(const char* foo)
{
char* bar = new char[10];
A normal_A(bar);
const A const_A(foo);
}

ここでnormal_Aは問題ないのですが、const_Aをread()のみ可能なように
成立させるにはどう書くべきでしょうか。
最初の初期化以外はクラスが変更されないことを保証する

A(const char* p):ptr(p)const{}

みたいなコンストラクタが書けるといいのですが。
もっとも、このようなコンストラクタが書けた所でptrがconstではないですけど。