0

C++において、内部表現がユーザーに公開されず、透過的に変更できるクラス。

これは、派生、抽象化、ポリモーフィズム、カプセル化、継承の例ですか?

カプセル化だと思います。

メンバー データは非公開であり、ユーザーには公開されませんが、メンバー関数によって変更できます。

正しい ?

4

2 に答える 2

1

最初の (宿題) の質問は、カプセル化と抽象化の両方の例のようです。あなたの先生が何を期待しているか誰が知っていますか?

これに関しては:

メンバー データは非公開であり、ユーザーには公開されませんが、メンバー関数によって変更できます。

これが正誤問題で、そのままコピーした場合、答えは誤りです。クラスのデータ メンバーは public にすることができます。文の先頭に「if」がある場合、答えは true に変わります。

宿題の質問を投稿する場合、転記段階であいまいさや文法上の誤りを導入する言い訳はありません。

于 2013-12-27T03:52:52.880 に答える
0

期待される答えは明らかに「カプセル化」です。

これは、派生、抽象化、ポリモーフィズム、カプセル化、継承の例ですか?

派生と継承は簡単に除外されます。コードを構造化するために使用される可能性があるため、クラスの内部表現を簡単に変更できますが、問題にはそれらを必要とするものは何もありません。

ここでの「抽象化」は、抽象クラスを指すのではなく、より一般的には抽象化を指します。これは、実装コードを透過的に変更できるようにするために内部の詳細を隠すよりもはるかに広いものです。

ポリモーフィズムも正解ではありませんが、ポリモーフィズムとカプセル化の関係により、選択する際に混乱する人もいるかもしれません。

カプセル化とは、コードを「内部」の詳細と「外部」のコードに分割し、この 2 つをインターフェイスで分離することです。ポリモーフィズムは、特定の変数を介してインターフェイスにアクセスするときに、どの実装が動作するかを選択または設定するための特定のメカニズムです。したがって、明らかにポリモーフィズムはカプセル化に依存して、ポリモーフィック変数にアクセスする「外部」コードを実装から分離しますが、カプセル化はポリモーフィック コンテキストで使用する必要はありません。

したがって、ここでカプセル化の定義を再掲し、ポリモーフィズムとの関係を明確にすることで、問題がこれらの用語の中でカプセル化を一意に識別することであることは明らかです。

メンバー データは非公開であり、ユーザーには公開されませんが、メンバー関数によって変更できます。

正しい ?

データメンバーにアクセスしてその値を変更するメンバー関数の許可について言及している場合、これは「内部表現[...]は透過的に変更できる」という質問の意味ではありません。

つまり、外部コードに対応するソース コードを書き換える必要なく、隠された内部の詳細に対応するソース コードを書き換えることができます。たとえば、データをカプセル化する 2 次元ベクトルを設計した場合、その実装 (メンバー データとメンバー関数の両方) を自由に書き直して、デカルト座標の使用と rho-theta 表現の使用を切り替えることができます。「外部」コードを変更する必要はまったくありません。

于 2013-12-27T05:23:37.017 に答える