1、初始化列表,尽量使用。

2、函数是否加const,只用而不改变就推荐加上const。如自定义的get某个属性的函数。

3、函数参数尽量用引用传递,返回值也优先考虑引用类型(引用必须保证在使用前,本体不能消失。所以返回值是局部变量,就不可以用引用类型,出了大括号,本体就消亡了)。

函数参数如果只拿来使用,不允许被改变,就要const修饰。

4、类的成员变量尽量放在private部分,不直接暴露出来,否则会打破C++的封装特性。可以通过public中函数来访问。

想被外界使用的函数,放在public部分。

编写自己的类时,思路顺序:

类有哪些成员变量(推荐放privite中)——>这些变量要做哪些事,依此来创建函数——>函数参数、返回值是否可变,能否用引用。

如果想让一些函数直接访问我privite中的变量,那就friend修饰这些函数(即友元函数)。

5、类内出现指针,建议不用默认的拷贝构造函数、拷贝赋值函数、析构函数。因为指针的出现,多半是要动态创建一些东西,在销毁的时候,没有delete所有,会造成内存泄漏。

下面是C++标准库里的String类,注意它的拷贝构造函数、拷贝赋值函数都使用了C语言的strcpy()深拷贝函数,即新开辟内存,而不是共用一块内存。

而自定义类,系统默认的拷贝构造函数、拷贝赋值函数都是只拷贝指针,即浅拷贝,共同指向一个本体。若拷贝赋值函数被启用,第1步就把本体消掉了,第2步会出问题。

下图为拷贝构造函数的内容(推荐模仿),String s1("hello"); 或String s2(s1);会调用此函数。

下图为拷贝赋值函数内容(推荐模仿),String s2=s1;会调用此函数。注意经典的三步:删除内存,创建内存,深拷贝存值

析构函数

C++编程习惯的更多相关文章

  1. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  2. 漫谈C++:良好的编程习惯与编程要点

    以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯. ① Header(头文件)中的防卫式声明 complex.h: # ifndef ...

  3. 10条PHP编程习惯助你找工作

    过去的几周对我来说是一段相当复杂的经历.我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐 趣.我从来没有被开除过,所以很难不去想得太多.我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人, ...

  4. 10条PHP编程习惯

    过去的几周对我来说是一段相当复杂的经历.我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐 趣.我从来没有被开除过,所以很难不去想得太多.我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人, ...

  5. [置顶] 学习JDK源码:编程习惯和设计模式

    编程习惯 1.用工厂方法替代构造函数 Boolean.valueOf() 通过一个boolean简单类型,构造Boolean对象引用. 优点:无需每次被调用时都创建一个新对象.同时使得类可以严格控制在 ...

  6. iOS高效编程秘诀—坚持编程习惯

    资料源于网络 习惯会影响一个人做事的方式,也会直接影响效率.我经常在项目完成后自我总结,有哪些做得好的,有哪些做得不好的?然后把一些好的流程记录下来,并且重新运用回编程中.那些能够坚持去做的流程,就变 ...

  7. 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨

    Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1. 使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中 ...

  8. java的编程习惯影响程序性能

    在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身. 养成良好的编程习惯非常重要,能够显著地提升程序性能. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...

  9. 养成良好的C++编程习惯(持续更新)

                    c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题. 没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且 ...

  10. js代码之编程习惯

    编程习惯: 异常处理 如果你没有使用异常处理的习惯,这可能是因为你并未真正的理解它的作用.当你正确使用异常处理之后,你会发现你的代码最显著的变化就是:少了很多的 if-else 语句 . 虽然在 JS ...

随机推荐

  1. CSP前的板子们

    见窝的luogu博客qwq noip前的板子们

  2. Nmap脚本使用

    Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp. Nmap可以完成以下任务: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 Nmap在实际中应用场合如下: ...

  3. ssh常用操作

    介绍ssh.sshpass.scp等linux下远程操作常用的命令 ssh 通过终端远程linux服务器的常用命令 ssh root@192.168.1.100 #以root用户链接到目标服务器,连通 ...

  4. quartz2.3.0(四)JobDataMap—带状态集合的定时器内置集合

    任务类 package org.quartz.examples.example4; import java.util.Date; import org.quartz.DisallowConcurren ...

  5. (五) Docker 安装 Nginx

    参考并感谢 官方文档 https://hub.docker.com/_/nginx 下载nginx镜像(不带tag标签则表示下载latest版本) docker pull nginx 启动 nginx ...

  6. 浏览器输入 URL 之后的链路

    视频 [序章]要找到B站有多难?秃头警告 脑图 一次完整的 Http 事务 文章 技术普及帖:你刚才在淘宝上买了一件东西 Github-从URL输入到页面展现到底发生什么? 总结的非常全 前端面试题: ...

  7. jQuery中的 AJAX

    jQuery库中支持AJAX的操作,功能十分完善 详细请参考官方文档:https://www.jquery123.com/category/ajax/ 首先需要引入jquery文件!!! $.ajax ...

  8. Tomcat - 启动闪退

    版本:Tomcat 9 问题:启动闪退.在控制台中输入"java -version"可以正常输出java的版本信息,但是使用start.bat启动时候闪退. 解决方法:配置系统环境 ...

  9. C++之同名覆盖、多态

    一.同名覆盖引发的问题 父子间的赋值兼容--子类对象可以当作父类对象使用(兼容性) 1.子类对象可以直接赋值给父类对象 2.子类对象可以直接初始化父类对象 3.父类指针可以指向子类对象 4.父类引用可 ...

  10. SAP云平台里的三叉戟应用

    大家第一次看到SAP MTA这个词组,会联想到什么? Jerry第一次看到的时候,联想到的是那一个个足坛著名的三叉戟攻击组合. 海皇波塞冬(Poseidon),奥林匹斯十二神中地位仅次于宙斯的大神,海 ...