1、赋值,引用,指针

  这三个概念是很多编程语言里面共有的,为了实现c++的高效率,这3板斧更是被发挥的淋漓尽致。总结一下,可以分为两种情况:【传】【返回】。

  【传】赋值的意思就是对变量进行复制  fun(int a), fun(5)。 matlab 里全部都是这样的调用,matlab 并不能传引用。这样做的好处是函数不会修改传入值,坏处是需要对传入的参数进行复制,如果参数很大(e10的点云),那么复制会有很大开销。

  【传】引用的意思是将变量的引用传入,比如 fun(int & a) , int b; fun(b)。这样的做法可以在函数中改变b的值。好处是直接传了地址,不需要复制开销,坏处是不利于变量保护。

  【传】指针和传引用类似,一般情况下,指针是一种很丑的参数,但是有的时候又不得不以指针作为参数。比如点云,往往点云的规模是动态的,内存也是动态分配的,所以很多点云处理函数的参数都是PointCloud<PointXYZ>::ptr,传指针是会改变指针所指向的内容的。

  【返回】值的意思是函数返回一个值,往往是 a = fun(b),被返回的值只能做右值。

  【返回】引用的意思是返回一个变量,这个变量可以有值,也可以未被初始化。它是可以作为左值的,比如 a.getobj() = createobj(A). 或者 ostream & operator <<(ostream & o){return o;  } cout<<MY_OBJ<<endl;

  【返回】指针,返回一个指针也是无奈之举,比如输入的是一个点云,返回它的分割子集。

  总而言之,返回引用多半是为了做左值,返回指针多半是因为有内存开销上的顾虑。

2、const 与数据保护

  const 有三种用法,分别是和数结合,和指针结合,和函数结合。

  【和数结合】和数结合的情况非常单纯,意思就是这个变量不能改了。 int c, const int a =5; const int & b = c; 这样的情况下a = 1, b= 1都会报错,如果想要b = 1,可以令c = 1;

  【和指针结合】和指针结合的情况有点点复杂,分两种 const int * p = & c; 表示常int,这是意思是c的值不能通过p 来修改,和上面的常引用是一样的意思!! int const *p = & c 则表示常*p,意思就是p不能指向其他数据。

  【和函数结合】和函数结合要更复杂那么一点点。分两种情况,fun(const int & a),表示a 不能被修改。fun(int a) const{},const 修饰{}——常成员函数,表示成员函数不允许修改成员变量。常对象只能调用这种常成员函数。

3、构造与析构

  构造与析构是面向对象的路子。主要是构造函数有一点复杂,分缺省构造,普通构造,拷贝构造。

  【缺省构造】如果我们不写构造函数,那么会自动生成缺省构造函数。但是一旦写了,那么就没有缺省构造函数了。如果你想要没参数的构造函数,要么用缺省值伪装,要么自己写上 myclass(){}。建议后者,有时候不记得搞了缺省值会出事的。

  【普通构造】构造函数的作用是初始化成员变量,如果成员变量是私有的,那很可能只有这么一次机会初始化。

  【拷贝构造】拷贝构造是最啰嗦的,它有两种调用形式:1、myclass b ;  myclass a(b); 2、myclass a = b。 第二种看似用了操作符 = ,实际不是的,它调了拷贝构造函数,而不是操作符重载。如果你重载了=,最好别有二义性。

  【析构函数】析构函数最重要的是,如果用new 申请了变量,那么一定要在析构函数里delete []。当然,如果用boost 的 智能指针,可以不用手动释放。

4、操作符重载

  操作符重载还是比较好理解的,记好一个细节,左值要返回引用。

5、继承

  继承是 is 的操作,如果一个类继承了其父类,那么子类的对象,在内存里会有父类的所有成员变量!并且自动获得父类所有的成员函数。不过获得的成员函数只能操作内存里父类的那些成员变量了。

  设计继承最重要的是子类必须获得父类所有的性质。如果父类有一个行为是子类不需要的,那么就算设计的不好了。

  子类中比较有难度的是构造函数的设计,因为要对内存里父类的那些成员变量赋值,所以其构造函数要写成如下:son(int a,int b,int c):father(a,b),c_(c){}。直接用父类的类名,来完成成员变量的赋值。一个简单的继承例子如下:

C++学习心得总结【20181128】相关推荐

  1. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  2. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  3. 对于mysql存储过程感想_存储过程学习心得

    存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...

  4. 好程序员Web前端教程分享Vue学习心得

    为什么80%的码农都做不了架构师?>>>    好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...

  5. 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...

    关于计算机网络辅助大学英语教学的思考学习心得 [摘要]计算机网络辅助教学可以增强学生的学习兴趣,提高他们自觉学习的能力,因而得到了大多数学生的认可,取得了比较显著的成效.计算机网络辅助教学也对大学英语 ...

  6. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

  7. Spring Framework------version4.3.5-----Reference学习心得-----总结

    1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/       2.Spring Framework ...

  8. 计算机基础与应用(上)笔记总结,计算机基础学习心得体会范文(通用3篇)

    计算机基础学习心得体会范文(通用3篇) 当我们对人生或者事物有了新的思考时,好好地写一份心得体会,这样可以记录我们的思想活动.那么要如何写呢?以下是小编精心整理的计算机基础学习心得体会范文(通用3篇) ...

  9. *:学习心得——C语言----S1T62班 王作舟

    *:学习心得--C语言----S1T62班 王作舟 来源:[url]http://www.accp-teem.com.cn/ArticleView/2007-7-14/Article_View_118 ...

  10. [转]verilog语法学习心得

    verilog语法学习心得 1.数字电路基础知识: 布尔代数.门级电路的内部晶体管结构.组合逻辑电路分析与设计.触发器.时序逻辑电路分析与设计 2.数字系统的构成: 传感器  AD  数字处理器  D ...

最新文章

  1. struts2实验2:struts2.xml action中* ,{}以及${}
  2. 真香!一行Python代码,帮你制作小姐姐的表情包,靠谱吗?
  3. 文件系统应用笔记之一:FatFS在STM32F4上的移植
  4. Codeforces D. Genius‘s Gambit
  5. delphi 获取当前路径
  6. PReLU, LReLU, ReLU
  7. MIT 18.02 多变量微积分笔记总目录
  8. 三角函数的正交性及其公式推导
  9. keras优化算法_Keras实现两个优化器:Lookahead和LazyOptimizer
  10. debian设置IP
  11. 基于MPC算法的汽车自适应巡航系统仿真与分析
  12. Windows官网直接下载正版操作系统方法
  13. 百度地图设置显示中心点
  14. vs 2022连接MySQL数据库
  15. android 横竖切换demo,移动页面横竖屏切换提示 - 轩枫阁
  16. 计算机毕业设计题目php,php计算机毕业设计参考题目
  17. 3.Maven 常用命令
  18. 如何用2SC5200晶体管制作音频放大器
  19. Windows server 2012 服务器挂载NAS盘
  20. 2022年牛客多校第三场补题记录

热门文章

  1. vue 根据组件地址动态加载异步组件
  2. yarn : 无法加载文件 E:\leading\NodeJs\info\node_global\yarn.ps1,因为在此系统上禁止运行脚本
  3. C#LeetCode刷题-拓扑排序
  4. 如何理解许多Android布局
  5. SAS在金融中的应用三
  6. matlab实现获取tof,一种结合TOF技术和双目视觉的深度信息获取装置及其方法与流程...
  7. Django查询数据
  8. Maven系列(一):maven基础入门
  9. 入门实践,Python数据分析
  10. 小白学 Python 爬虫:Selenium 获取某大型电商网站商品信息