地雷質問なのは理解した上で質問させていただきます。
言語仕様の話になると思うのですが、下記のコードの func2
がエラーになるのはおかしくないですか?
B は A を継承しているのですから別オブジェクトの protected を触れても問題ないと思うのですが。
どういう意図でこのような設計になっているのでしょうか?
C++
1class A { 2protected: 3 void call() { } 4}; 5 6class B : public A { 7public: 8 void func1() { call(); } // <- ok 9 void func2(A a) { a.call(); } // <- ng 10 void func3(B b) { b.call(); } // <- ok 11private: 12 void call() { } 13};
c# - Is there a way to reach a protected
member of another object from a derived type? - Stack Overflow
C# ですが stack overflow で同様の質問がされており、出来ない旨と出来なくなっている理由(変更されたくない protected の内容を持ったクラスを継承してそこから呼び出すことで変更できてしまう)が書かれていますが、本当にそのためだけにアクセス不可にしているのでしょうか?
また、これを回避する方法があれば教えていただきたいです。お願いいたします。
> どういう意図でこのような設計になっているのでしょうか?
これに関しては,実際にその設計を行った誰かに対して問うか,あるいはその誰かがそのような話を記した文面か何かを探す以外には,解は得られないと思います.
(そういう情報源無しに「こうだからじゃないの?」って言っても意味ないでしょうし)
> これを回避する方法があれば教えていただきたいです。
こっちに関しては,「代替策は無いか?」という話なのでしょうから,どうしてそんな不自然なアクセスをしたくなっちゃったのか? 本当は何をしたいのか? etc... といったような具体的な話を述べた方が良いのではないでしょうか.
> どうしてそんな不自然なアクセスをしたくなっちゃったのか?
に関してですが、確かに設計が変な感じになっているのは否めないです。
既に素晴らしい回答を沢山いただいたので、実際の設計に関しての質問は新たに立ち上げようと思います。
追記:質問を立ち上げる前に回答などを参考に設計を考え直してみます。

回答4件
あなたの回答
tips
プレビュー