2017-04-22 12 views
-2

私は、派生クラスにprint()メソッドのmyCバージョンとmyBバージョンの両方を呼び出そうとしています。 myA型のインジケータオブジェクトからこれらのメソッドを呼び出すことになります。これをC++でどうやって行うのですか?C++の派生クラスのメソッド呼び出し

#include <iostream> 
using namespace std; 

class myC 
{ 
public: 
    myC() { } 
    void print() 
    { 
    cout<<"Class C print."<<endl; 
    } 
}; 

class myB: myC 
{ 
public: 
    myB() { } 
    void print() 
    { 
    cout<<"Class B print."<<endl; 
    } 
}; 

class myA: myB 
{ 
public: 
    myA() { } 
    void print() 
    { 
    cout<<"Class A print."<<endl; 
    } 
}; 

int main() 
{ 
    myA indicator(); 
    indicator.print(); 
    return 0; 
} 
+0

あなたはMYBを呼び出すことができます::プリント()とミャーからMYC ::印刷()。 – ehudt

+4

'myA indicator();'から '()'を削除します。 - 現在はコンパイルしてはいけません。ほとんどの場合、困惑します(https://en.wikipedia.org/wiki/Most_vexing_parse)。 – Unimportant

+0

あなたの本を読んでください。これはこれを説明します。 –

答えて

0
このよう

void myA::print() 
{ 
    cout<<"Class A print."<<endl; 
    myB::print(); 
    myC::print(); 
} 

これはつまり、彼らが保護されたとして、またはパブリックのいずれかとして導出されなければならない基本クラスは、派生クラスからアクセス可能であることが必要です。

+0

[Demo](https://ideone.com/FwLJxi) –

2

は、まず、あなたは自分のクラス名

int main() 
{ 
    myA indicator; 
    indicator.print(); 
    indicator.myB::print(); //Note that indicator is object of only 
    indicator.myC::print(); //class myA but access myB,myC's print 
    return 0; 
} 

を使用してそれらを呼び出すmainで今

class myB:public myC 
{ 
.... 
} 

class myA:public myB 
{ 
.... 
} 

publicprotectedprivate

の変更のようなあなたの継承を、いくつかのアクセス指定子を使用して継承する必要がありますあなたはこれらの楽しみを呼び出すことができますpublicを使用して継承した場合、publicを継承すると、クラス外の関数にアクセスできるため、これらの関数をmainまたはそのクラス以外の場所で呼び出すことができるためです。 protectedについては、Kerek sb回答を参照してください。

出力

Class A print. 
Class B print. 
Class C print. 
+1

継承の際にアクセス指定子は必要ありません。プライベート継承( ':private class_name')はデフォルトです。なぜ 'public'継承がここで働くのか、なぜなら' private'かデフォルトのものはそうではないのです。回答の残りについて+1 – Fureeish

関連する問題