c++ - 通过值传递对象时防止切片(继承)
问题描述
据我了解,当对象在方法中按值传递时,会调用复制构造函数。
因此,如果我实现自己的 Copy Constructer,当我在方法中按值传递对象时,有没有办法避免切片?
例子 :
// 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::Display() 被调用”(不通过引用传递或使用指针)?
谢谢!
解决方案
不,没有。当你声明void f(A anA)
f
得到它自己的新鲜A
。那里没有B
。
A
您可以通过删除s 复制构造函数来防止切片。那么没有人可以对调用进行切片f
,因为没有人可以调用f
。
推荐阅读
- c# - 将 IOptions<> 注入静态类
- lua - 尝试索引本地(数字值)
- django - 我的 django html 标签没有显示结果
- tensorflow - 将检查点存储到 Google Cloud 存储桶时出错
- firebase - 在 Firebase 存储上显示文本文件中的文本
- mysql - 将mysql插入与独立的WHERE语句结合起来
- coq - 证明 COQ 中 n < m + n 或 0 < m
- python - Django 基于类的视图将 url 参数保留在会话中
- amazon-web-services - AWS Sagemaker - 安装外部库并使其持久化
- html - 在 A4 大小的 div 中定位页脚