クラス内のプライベート変数の参照による受け渡しは、そのクラスの外部で直接変更することができますか?それとも、これはコンパイラーが「拾い上げて防ぐべき」ものですか?
例:
//-------------------------------------------
class Others
{
public:
Others() {};
void ChangeIt(string &str) { str = "Changed by Others"; }
};
//-------------------------------------------
class Locals
{
private:
string PrivateString;
public:
Locals() { PrivateString = "Set by Locals"; };
void VisitOthers() { Others o; o.ChangeIt(PrivateString); }
const string GetString() { return PrivateString; }
};
//-------------------------------------------
int main(void)
{
Locals lo;
cout << lo.GetString() << "\n";
lo.VisitOthers();
cout << lo.GetString() << "\n";
return 0;
}
出力:
Set by Locals
Changed by Others
所有者クラスにプライベートであるが、必要に応じて他の人が変更できる、他の/異なるオブジェクトを使用して、このようなことを行う必要があります。私が最後に望んでいるのは、この種の練習が戻ってきて、将来私をバイトすることです。
私が本質的に心配しているのは、クラス/構造体を基本的にバッファーへのポインターとして表示し、メンバーのアドレスをこのバッファーへのオフセットとして表示したいので、メンバーのポインター値を渡してもそれが属するクラス/構造体のベースポインタなしでは役に立たない。これは私が本能的にそうあるべきだと感じていることであり、上記の例は不可能であるはずです。