C++ 按值传递的切割问题(Slicing Problem)

C++ 的函数传参一般会建议避免使用按值传递的方式,除了按值传递的拷贝开销外,还有个原因就是按值值传递会导致切割问题:如果函数参数使用按值传递的方式,并且参数类型是一个类型的基类,调用时候传递继承类对象的时候,这个对象在拷贝的时候会被切割,也即继承类覆盖基类的部分被切割掉了,换句话说,就是拷贝的时候只拷贝了继承类的基类部分。例如:

 #include <iostream>class Base {public:virtual void foo() {std::cout << "Base foo" << std::endl;}};class Derived : public Base {public:virtual void foo() {std::cout << "Derived foo" << std::endl;}};void func(Base b) {b.foo();}int main() {Derived d;func(d);return 0;}

虽然给 func 传递的是 Derived 类型对象,但是 func 参数类型是 Base 类型,产生对象切割,funcb.foo 结果如下:

Base foo

如果将 func 参数改成指针或者引用的方式,不会有该问题。

C++ 按值传递的切割问题(Slicing Problem)相关推荐

  1. 动态规划之钢条切割问题——Rod-cutting problem

    问题描述 问题的最优解包含相关子问题的最优解,这些子问题我们可以独立求解. 应用以下公式: 方法1:暴力法 长度为n的钢条可以有2^(n-1)中切割方案,因为离钢条左端距离分别为1,2,--,(n-1 ...

  2. 关于图像处理中的位图切割(Bit-pane Slicing)原理的自我见解

    前段时间做过一道数字图像算法的课程一道题,就是有关位图分割算法的,但是当初没理解,我翻了几篇文章后把它弄明白了,所以我打算记录下我的想法,免得忘了. 题目: Propose a set of inte ...

  3. 《Effective C++》读书笔记(第一部分)

    有人说C++程序员可以分为两类,读过Effective C++的和没读过的.世界顶级C++大师Scott Meyers 成名之作的第三版的确当得起这样的评价. 本书并没有你告诉什么是C++语言,怎样使 ...

  4. effective c++ 条款20:宁以pass-by-reference-to-const替换pass-by-value

    记住: 尽量以pass-by-reference-to-const替换pass-by-value.前者通常比较高效,并可避免切割问题(slicing problem). 以上规则并不适用于内置类型,以 ...

  5. Effective C++ 中文版(第三版)读书笔记 更新ing~

    Effective C++ 中文版(第三版)持续更新ing 让自己习惯C++ 条款1 视c++为一个联邦 条款2 尽量以const,enum,inline替换#define 条款3 尽可能使用cons ...

  6. Effective c++学习笔记条款20:宁以 pass-by-reference-to-const替换pass-by-value

    Prefer pass-by-reference-to-const to pass-by-value         这个问题在在C++是非常常见的.传值和传引用巨大的差别在于你所使用的参数是其本身还 ...

  7. Effective C++条款(第三版-侯杰译)

    条款一:视C++为一个语言联邦 [C++高效编程守则视情况而变化,取决于你使用的C++哪一部分] 条款二:尽量以const,enum,inline替换#define [对于单纯变量,最好以const对 ...

  8. Effective C++改善程序与设计的55个具体做法笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  9. more effective c++和effective c++读书笔记

    转载自http://bellgrade.blog.163.com/blog/static/83155959200863113228254/,方便日后自己查阅, More Effective C++读书 ...

  10. [C++]Effective C++笔记

    前言:拖了好久的巨坑.不是很深,打算大火猛烹,一口气翻完星空cpp(effective c++),为开学和另一本蓝书做准备.不过我买的那本星空模糊的不行,盗版的感觉.阅读体验还不如pdf+pad. 还 ...

最新文章

  1. web服务器错误配置文件,web服务器http配置文件
  2. 开启Web金库:互联网业务成功之道——前言
  3. TYVJ P1053 字符串的展开 Label:字符 水
  4. Python 各种读取保存tif,tiff,png,jpg,mat等格式图像方法大集合
  5. 与数学表达式对应的python表达式_与数学表达式cd/2ab对应的Python表达式中,不正确的是:...
  6. Jmail的使用,可以发送给多人
  7. 把canvas标签里的图像下载成本地图片文件
  8. CSS——id 和 class 选择器
  9. VC编写和调用DLL的简单例子
  10. 读取gps观测数据o文件的matlab编程,读取GPS观测数据O文件的matlab编程.doc
  11. halcon三种模板匹配方法
  12. 基于Caffe的人脸检测实现
  13. 第5章第25节:如何寻找和下载视频、音频素材 [PowerPoint精美幻灯片实战教程]
  14. Ubuntu神奇地变成了只读文件系统的错误--修复方法
  15. mini《猜字》游戏,谁玩谁迷糊
  16. ## no data sources are configured to run this SQL and provide advanced code assistance.
  17. Postman接口与压力测试实例
  18. 【华为OD统一考试B卷 | 200分】服务器广播、需要广播的服务器数量( C++ Java JavaScript )
  19. Qmail+Vpopmail 安装相关文档
  20. oracle分类账设置,Oracle EBS R12 总账与子分类账的关系

热门文章

  1. 【新知实验室 腾讯云TRTC实时音视频体验】
  2. ISLR读书笔记十六:最大边际分类器(maximal margin classifier)
  3. 做XH2.54杜邦线材料-导线
  4. 怎么在html中加入特效汉字,如何在小视频上加文字,文字动画特效,朋友圈小视频加文字...
  5. 青囊如可授 从此访鸿蒙的意思,《坛滴槐花露,香飘柏子风。》
  6. 从计算机网络系统组成看 计算机网络可分为,从计算机网络系统组成的角度看,计算机网络可以分为 子网和资源子网。...
  7. 马斯洛提出动机理论_人做事的动机来自于哪里?--马斯洛需求层次理论解读
  8. MySQL外键更新删除设置cascade、set null、restrict、no action的区别
  9. 斯托克斯定理(Stokes' theorem)
  10. python没有缩进错误但报缩进_Python:“缩进错误:unindent与任何外部缩进级别都不匹配”...