デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4419  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

プログラム

#include <iostream> 

class base {
public:
    base() { std::cout << "base::base()" << std::endl; }
    base(int a) { std::cout << "base::base(" << a << ")" << std::endl; }
    virtual ~base() {}
}; 

class derived : virtual public base {
public:
    derived() { std::cout << "derived::derived()" << std::endl; }
    derived(int a) : base(a) { std::cout << "derived::derived(" << a << ")" << std::endl; }
}; 

class more_derived : virtual public derived {
public:
    more_derived() { std::cout << "more_derived::more_derived()" << std::endl; }
    more_derived(int a) : derived(a) { std::cout << "more_derived::more_derived(" << a << ")" << std::endl; }
}; 

template<typename T> void func(const T&) { std::cout << "func()" << std::endl; }
template<> void func<derived>(const derived&) { std::cout << "func<derived>()" << std::endl; } 

int main(int argc, const char* argv[])
{
    func(base(1));
    std::cout << "----------" << std::endl;
    func(derived(2));
    std::cout << "----------" << std::endl;
    func(more_derived(3))

    return 0;
}

※記述ミス(不足)を赤字で修正しました

実行結果

base::base(1)
func()
----------
base::base(2)
derived::derived(2)
func()
----------
base::base()
derived::derived(3)
more_derived::more_derived(3)
func()

 

仮想継承したときには明示的に先祖クラスのコンストラクタを指定していない場合デフォルトコンストラクタが呼ばれる

親クラスで特殊化されていても派生クラスには適用されない

今まで知らずに使っていることはあっても殆ど自分で書くことのない機能だったから知らんかった。

投稿日時 : 2008年6月3日 20:33

コメント

# re: [C++] 仮想継承とテンプレートの特殊化で最近ハマったこと 2008/06/04 10:55 2リットル
仮想継承に初めて触れたので、勘違いしているかもしれませんが、
fucn()の呼び出し元はどこになるのでしょうか?

多重継承した同名インスタンスの共用ってスゴイっすね。



# re: [C++] 仮想継承とテンプレートの特殊化で最近ハマったこと 2008/06/04 23:27 あんどちん
> fucn()の呼び出し元はどこになるのでしょうか?
ごめんなさい。間違ったソースを貼り付けていました。
修正しました。

> 多重継承した同名インスタンスの共用ってスゴイっすね。
ここ、よくわからないです。
# ここでは多重継承出してないですし


# http://burberry.suppa.jp/ 2012/11/06 14:52 バーバリー ポロシャツ
カッコいい!興味をそそりますね(^m^)

# re: Ruby で数値を 0 埋めする 2019/01/24 13:50 zzyytt
http://www.nike-hyperdunk.us.com
http://www.goldengoose-outlet.us.com
http://www.jordan11retro.us.com
http://www.nikehuaracheshoes.us.com
http://www.bape-hoodie.us.com


Post Feedback

タイトル
名前
Url:
コメント: