提问人:CSstudZ 提问时间:12/13/2019 更新时间:12/13/2019 访问量:84
防止在按值传递对象时进行切片(继承)
Prevent slicing while passing by value an object (inheritance)
问:
据我了解,当对象在方法中按值传递时,会调用复制构造函数。
因此,如果我实现自己的复制构造函数,有没有办法在方法中按值传递对象时避免切片?
例:
// 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
};
在main.cpp文件中,我这样做:
void f( A anA)
{
anA.Display();
}
int main()
{
B anB;
f ( anB );
return 0;
}
据我了解,当这样做时,anB 被复制到 anA(方法 f 的形式参数):
f ( anB );
有没有办法让它输出“B::D isplay() was called”(不通过引用传递或使用指针)?
谢谢!
答:
0赞
Caleth
12/13/2019
#1
不,没有。当你声明得到它自己的新鲜.那里没有。void f(A anA)
f
A
B
您可以通过删除 s copy 构造函数来防止切片。那么就没人可以切片了叫,因为没人可以叫。A
f
f
上一个:继承的构造函数不能用于复制对象
下一个:C++ 中复制构造函数的继承17
评论
B
A
f()
B
const &
const *
A
f()