我想知道是否可以在函数中使用基类作为参数,但在调用传递派生类的函数时是什么?
在.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 :(得分: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