我怎样才能调用派生类之一

时间:2017-07-29 17:16:12

标签: c++ inheritance

我想知道是否可以在函数中使用基类作为参数,但在调用传递派生类的函数时是什么?

在.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;
}

或者我必须使用重载功能吗? 它有另一种方法吗?

1 个答案:

答案 0 :(得分: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