2017-08-29 5 views
3

他の呼び出しに基づいて、基本クラスの複数の機能を置き換えることができる「スタッキング継承」のタイプはとにかくありますか?複数のクラスからのC++ポリモフィズム

例えば何かのように:

class Base { 
     void func1(){/* do something */} 
     void func2(){/* do something */} 
}; 
class A1 { 
     void func1(){/* do something else */} 
}; 
class A2 { 
     void func2(){/* do something else */} 
}; 

int main(){ 
    A1 a1obj = new A1(); 
    A2 a2obj = new A2(); 
    Base obj = new Base(); 

    obj = &a1obj; 
    obj = &a2obj; 
    obj.func1(); //now A1::func1() 
    obj.func2(); //now A2::func2() 
} 

ありがとう

仮想関数やC++で(可能であれば避けるべきである)、多重継承があり
+0

は '使用する方法を説明する章をお使いのC++帳を開きますstd :: function'を読み込み、それを読んでください。 –

+0

はい、関数は仮想でなければなりません。基本クラスから派生する必要があります。多型の基本型を使用する場合は、ポインタまたは参照を使用する必要があります。 –

+0

これはおそらく(いくつかの良い初心者の本を読んで)回答されるでしょう(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

答えて

1

。あなたはこのケースで何ができるか

は次のとおりです。

class Base { 
     virtual void func1(){/* do something */} 
     virtual void func2(){/* do something */} 
}; 
class A1: public Base { 
     void func1() override {/* do something else */} 
}; 
class A2: public A1 { 
     void func2() override {/* do something else */} 
}; 

int main(){ 
    A2 a2obj; 
    Base* obj = &a2obj; 

    obj->func1(); //now A1::func1() 
    obj->func2(); //now A2::func2() 
} 

あなたも、ベースオブジェクトをインスタンススキップ可能性があり、ちょうど

int main(){ 
    A2 obj; 

    obj.func1(); //now A1::func1() 
    obj.func2(); //now A2::func2() 
} 
+2

*スキップすることはできません*、スキップする必要があります*。さもなければあなたの例で 'Base'が漏れます。 – spectras

関連する問題