2017-07-29 9 views
-1

派生クラスを渡す関数を呼び出すときに、関数のパラメータとして基本クラスを使用できるかどうか疑問に思っていますか?派生クラスの1つを呼び出すにはどうすればいいですか?

.hファイルで

class parent 
{ 
    virtual void foo(); 
} 

class child_a: parent 
{ 
    void foo(); 
} 

class child_b: parent 
{ 
    void foo(); 
} 
main.cppに中

void bar(parent p) 
{ 
    // Doing things 
} 

int main() 
{ 
    child_a a; 
    bar(a); 
    return 0; 
} 

または私がオーバーロードされた関数を使用する必要がありますか? それを行うには別の方法がありますか?

+0

タイプミスがある可能性があります。 'foo(a)'の代わりに 'bar(a)'を書いたかったかもしれません。 – iBug

+0

はいいいえ – sskirren

答えて

0

値でパラメータを渡すと、コピーコンストラクタが呼び出されるので、実際には親のオブジェクトがコピーされます。

あなたが参照またはポインタでそれを渡す場合は、あなたが実際に子クラスを持つ

class parent{ 
public: 
    parent(){ 
    } 
    parent(const parent &obj){ 
     cout<<"I copy a parent"<<endl; 
    } 
}; 

class child : public parent{ 
public: 
    child(){ 
    }  
    child(const child &obj){ 
     cout<<"I copy a child"<<endl; 
    } 
}; 

void foo(parent p){ 
    cout<<"I am in foo"<<endl; 
} 

int main() 
{ 
    child c; 
    foo(c); 
} 

出力:

私は私がfoo

にいる親

をコピーします

関連する問題