エラー、バグ、質問 - ページ 1057

 
Zloy_Koldun:

財布はあくまで特殊なケースです。そして、誰もそれを私的な部分に置くことを止めない。

また、別の ケースでは、他人のオブジェクトの親クラス変数にアクセス する必要があるかもしれません。

そして、これを許可するかどうかは、プログラマーの判断に委ねられる。そして、コンパイラはそのプログラムが正しく動作することを保証しなければならない。

そこがポイントで、このように全く 異なるケースが発生した場合、そのアーキテクチャは概念的に間違っていて、危険な可能性があるということです。

C++では、いわゆるフレンドリークラスという 概念が、ある時期から不幸にも導入されてしまった。あるクラスが他のクラスの編成を知れば、そのクラスの内部データを安全に扱えるというようなことです。世界中の何千人ものプログラマーが実際に使ってみた結果、問題を解決するよりも問題を増やしてしまう危険なものであることがわかり、JavaやC#といった最新の言語では放棄された。

 
C-4:
この機能には、不愉快なほど驚かされました。コンパイラが他人のインスタンスのプライベートフィールドを変更することを許可しているのであれば、それは間違いなくデタラメです。サービスデスクに投稿 しよう。
プラスアルファを仰ぎ見る、そこもまた然りです。
 
Zloy_Koldun:

理解できないのは、なぜそんなに自分を制限したがるのか、ということです。

自動的にプログラムの安全性が高まると思っているのか?

そんなことはない!それどころか

無駄な制約があるからこそ、いつかそういう書き方をするようになるんです。

OOPについて知っているようで、まだ理解していないのですね。

見てください。

///
/// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет.
/// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///
class Меценат
{
    public:
      /// Отдает нужное количество денег
      int GetMoney(int СколькоДенегВзять)
      {
          кошелек -= СколькоДенегВзять;
          return СколькоДенегВзять;
      }
    private:
       int кошелек;
};
クラスの本来のアイデアは、そのウォレットを誰でも使えるようにすることであるにもかかわらず、私が「ウォレット」変数を閉じたことは驚くべきことでしょうか。でも、みんなが好きなだけ取ったら赤字になるし、それは無理な話。現在、GetMoneyの機能で可能ですが、数行追加した後、さらにお金を取ることができなくなりました。ここで、マエケナスというクラスに、お金を要求する何十種類ものオブジェクトがアクセスしたとする。ウォレット変数が開かれた場合、これらのオブジェクトもそれぞれ十分なお金を持っているかどうかを制御する(つまり独自の実装を持つ)必要があります。そして、少なくとも1つがそうでなければ、ゼロではなくマイナスの値を得ることになり、お金を要求しておいて、結局はお金も借りたことになるというリスクがある。
 
C-4:

マテさん、あなたはOOPのことを少しは知っているようですが、まだ本質を掴んでいないようですね。

見てください。

クラスの本来の考え方は、その財布を誰でも使えるようにすることなのに、変数「財布」を閉じたのは意外でしょうか?でも、みんなが好きなだけ取ったら赤字になるし、それは無理な話。今機能GetMoneyはそれを許可しますが、数行を追加した後、より多くのお金を取ることを許可しません。ここで、マエケナスというクラスが、何十種類もの物体からお金をせびられたとします。ウォレット変数が開かれた場合、これらのオブジェクトもそれぞれ、十分なお金を持っているかどうかをチェックするように制御(つまり独自の実装)しなければならないでしょう。そして、少なくとも1つがそうでなければ、ゼロではなくマイナスの値を得ることになり、お金を要求しておきながら、結局はお金も借りてしまったということになる危険性があります。
プライベートウォレットに恨みはない。会話のきっかけはこれ!https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
私は、プライベートウォレットに何の恨みもありませんでした。会話はこんなところから始まりました:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
そうなんです。クラスBは 外部クラスAを 参照し、クラスAの 保護変数を利用できるようにしたい。どこが論理的なのか、私には理解できない。
 
C-4:
これは正しい。クラスBは 外部クラスAに アクセスし、クラスAの 保護変数を利用できるようにしたい。 ここの理屈がわからない。
理屈は関係ない、欲しいのは...!
 
MetaDriver:
ロジックがどうしたって?

http://alenacpp.blogspot.com/2006/03/blog-post_11.html

保護されたモドキは淫獣。本当に必要なのは稀です。

真のカプセル化はデータのプライバシーを意味する。

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
posの最初の文字を選択したい場合、posに1か0を入れるべきか、教えてください 配列のようにインデックスを付けているのでしょうか?
 
paladin800:
posの最初の文字を選択したい場合、posに1か0を入れるべきか、教えてください 配列のようにインデックスを付けているのでしょうか?
これは簡単に確認することができます。
 
paladin800:
posの最初の文字を選択したい場合、posに1か0を入れるべきか、教えてください 配列のようにインデックスを付けているのでしょうか?
そう、ゼロから。
理由: