据我所知,当对象在方法中按值传递时,将调用复制构造函数。
因此,如果我实现自己的复制构造函数,有没有办法避免在方法中按值传递对象时切片?
例:
// in headers file
// for A
class A
{
public :
virtual void Display() const
{ cout << "A::Display() was called << endl; }
};
// for B
class B : public A
{
public :
void Display() const
{ cout << "B::Display() was called << endl; }
//---> here I would created a copy constructer
};
在主文件中.cpp我这样做:
void f( A anA)
{
anA.Display();
}
int main()
{
B anB;
f ( anB );
return 0;
}
据我了解,完成此操作后,anB 被复制到 anA(方法 f 的形式参数(中:
f ( anB );
有没有办法让它输出"B::D isplay(( 被调用"(无需通过引用或使用指针传递(?
谢谢!
不,没有。当你宣布void f(A anA)
f
得到它自己的新鲜A
.那里没有B
。
您可以通过删除A
复制构造函数来防止切片。那么没有人可以切片呼叫f
,因为没有人可以呼叫f
。