OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

クラス間の関係

  • 困ってます
  • 質問No.103867
  • 閲覧数42
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 25% (2/8)

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

回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 71% (59/82)

「三つクラスの関係を示す」「クラス図」というのが よく分かりませんが、こういうことをしたい ということなんでしょうか?      Media     /   \ VisualMedia AudioMedia     \   /      AVMedia (下のクラスが上のクラスを継承している) class Media {   string author;   string ...続きを読む
「三つクラスの関係を示す」「クラス図」というのが
よく分かりませんが、こういうことをしたい
ということなんでしょうか?

     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つしか存在しなくなります。


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ