
C++のダイヤモンド継承がよく分からないから教えてほしんだけど。。
具体的なソースコードもあると嬉しいな。
こんな悩みを解決します。
- 本記事の内容
- ダイヤモンド継承とは?
- ダイヤモンド継承のダメな例
- ダイヤモンド継承の具体的なソースコード
- 本記事の執筆者
プロフィール


- 元エンジニア(歴7年)、資格保有数約20個(IT系以外も含む)
- 物販月利50万円⇒脱サラ
- 物販、システム開発、アフィリエイト、プログラミング、投資をやっています。
- 物販は彼女と楽しみながらやっています!
今回は、C++のダイヤモンド継承を解説します。



すぐ読み終わるので、是非最後まで読んでみてください!
よく読まれている記事はこちら!
目次
実行環境
今回は「AWS Cloud9」を利用します。



実行できる環境であれば何でもOKです!
ダイアモンド継承とは


ダイヤモンド継承とは、あるクラスに対して親クラスが複数あり、さらにその上に親クラスがある継承のことです。
ダイヤモンド継承のダメな例


上記の場合、Godが2体いることになるので、OreはどちらのGodを呼べばいいのか分かりません。
これを回避するために、Godを「仮想基底クラス」として定義します。
ソースコードでは「virtual」を付けます。
ダイヤモンド継承を実装してみた
ということで、早速実装してみます。
#include <iostream>
class God {
public:
void call_god() {
std::cout << "ゴッドやで!" << std::endl;
}
};
class Oton : virtual public God {
public:
void call_oton() {
std::cout << "おとんやで!" << std::endl;
}
};
class Okan : virtual public God {
public:
void call_okan() {
std::cout << "おかんやで!" << std::endl;
}
};
class Ore : public Oton, public Okan {
public:
void call_ore() {
std::cout << "おれやで!" << std::endl;
}
};
int main() {
Ore ore;
ore.call_god();
ore.call_oton();
ore.call_okan();
ore.call_ore();
}
意外と簡単ですね。
実行してみる
先ほどのソースコードを実行してみます。
Running /home/ec2-user/environment/lambda/dangling_pointer.cc
ゴッドやで!
おとんやで!
おかんやで!
おれやで!
Process exited with code: 0
問題なく実行されていますね。
まとめ
今回は、C++のダイヤモンド継承について図を交えて解説しました。
個人的にダイヤモンド継承は嫌いですが、何でも自分で実装してみないと分からないですね。
ではまた!
まとめ
- ダイヤモンド継承とは、あるクラスに対して親クラスが複数あり、さらにその上に親クラスがある継承のこと。
- 仮想基底クラスは、ソースコードでは「virtual」で表現する。
- おススメ本はこちら!



僕は↑の本でC++の勉強をしました!
非常に分かりやすいので是非!
- 関連記事
あわせて読みたい




【C++】多重継承を「おとん&おかん&おれ」で実践!
C++の多重継承がよく分からないから教えてほしんだけど。。具体的なソースコードもあると嬉しいな。 こんな悩みを解決します。 本記事の内容 多重継承とは?多重継承の…
あわせて読みたい




【C++】ダングリングポインタをAWS Cloud9で実行してみた!
C++のダングリングポインタがよく分からないから教えてほしいんだけど。。具体的なソースコードもあると嬉しいな。 こんな悩みを解決します。 本記事の内容 ダングリン…
- 自由な生き方がしたいなら!
自由な生き方をするためには、稼ぐスキルを身に付けなければなりません。
当サイト「リバトレ」では稼ぐスキルに関する情報を日々発信しているので、興味のあるものから見て頂ければ嬉しいです。
稼ぐスキルを身に付けよう!!
コメント