アプリ版:「スタンプのみでお礼する」機能のリリースについて

単行本、CD、DVDの三つを著作物と見たときのモデル化する時、これらの共通点は作者、出版社、出版時間、単価、内容などであるから、これらをクラスの属性にします。でも、各クラスは内容の取得方式が違います。本は目で、CDは耳で、DVDは目と耳両方で取得ができます。この観点から三つクラスの関係を示していいですか、ちょっと分からないです、そして、クラス図に書くとどういうになるでしょうか?
  宜しく、お願いします。

A 回答 (1件)

「三つクラスの関係を示す」「クラス図」というのが


よく分かりませんが、こういうことをしたい
ということなんでしょうか?

     Media
    /   \
VisualMedia AudioMedia
    \   /
     AVMedia

(下のクラスが上のクラスを継承している)

class Media {
  string author;
  string publisher;
 ...
};

class VisualMedia : virtual public Media {
  string sentences;
 public:
  void readContent();
};

class AudioMedia : virtual public Media {
  const int audioDataBytes = 1000000;
  char audioData[audioDataBytes];
 public:
  void playAudio();
};

class AVMedia : public VisualMedia, public AudioMedia {

};

クラス"Media"は、作者、出版者などの情報を
格納しておくクラスです。

クラス"VisualMedia"は、クラス"Media"を継承して、
文字情報とそれを読み出すメンバを付け加えたもの。

クラス"AudioMedia"は、クラス"Media"を継承して、
音情報とそれを再生するメンバを付け加えたもの。

クラス"AVMedia"はクラス"VisualMedia"と"AudioMedia"を
継承したもの。

このとき注意すべきは、"VisualMedia"と"AudioMedia"で、
"Media"を仮想継承しておかないといけないということです。

同一の基底クラスを持つ2つ以上のクラスから多重継承する
際には仮想継承をしないと、派生クラス内に基底クラスが
2つ以上存在することになります。(その結果、基底クラス
へのアクセスに曖昧性が生じ、コンパイルエラーになると
思います)

重複して継承される可能性のある基底クラスを
仮想継承しておくことで、そのような場合にも
基底クラスが1つしか存在しなくなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!