热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++核心知识点回顾与深化

虽然经常使用C++,但一些细节可能并不常用。通过查阅资料,回顾了几点重要的细节。首先,建议在构造函数的初始化列表中对成员对象进行初始化,而不是在构造函数体内,这样可以提高代码的效率和可读性。此外,还探讨了其他几个关键概念,如常量成员函数、引用计数和智能指针的使用等。这些内容对于深入理解和高效使用C++至关重要。

经常用C++,但是有些细节未必经常会用到。随便翻了翻书,随便拾起了几条细节回忆。

 

1.构造函数里对成员对象的初始化尽量在初始化列表里,而不要在构造函数里赋值。因为,c++对象的构造分为两步:

  1)数据成员的初始化

  2)执行被调用构造函数体内的语句。

  如上,数据成员初始化时也会调其构造函数,如果没有初始化列表,那么数据成员对象的默认构造函数会被调用一次。OK,这时到了第2步,还会再调用一次赋值操作。这样,对数据成员的初始化做了2此操作,一是缺省构造函数,二是赋值操作。其实如果写在初始化列表里,那么只需要一次构造函数的调用就可以完成。当然如果数据成员是固定的类型,那么两种情况的效率是相当的。

 

2.区分一下重载,覆盖和隐藏。

  重载:函数名相同,参数不同。在相同的作用域里。

  覆盖:虚函数override。派生类里的虚函数覆盖基类里的同名同参数虚函数。

  隐藏:如果派生类和基类里的函数名相同而参数不同,无论是否虚函数,在派生类里都“看不见”基类里的该函数。如果派生类里的某函数和基类里的某函数名称和参数都相同,而且不是虚函数,那么在派生类里也“看不见”基类里的该函数。

 

3.内联函数一般是跟在函数的定义而非声明。

  如下风格的内联函数不能生效

  inline void foo(int x,int y)

  void foo(in x,int y)

  {

      //to do

  }

  而如下风格的函数Foo 则成为内联函数:
  void Foo(int x, int y);
  inline void Foo(int x, int y) // inline 与函数定义体放在一起
  {

      //to do
  }

 

4. 初始化列表中成员列出的顺序和它们在类中声明的顺序相同。和初始化列表里的顺序无关。

 

5. extern “c”。

  extern “C”
 {
    void foo(int x, int y);
    // 其它函数
 }
 或者写成
extern “C”
{
    #include “myheader.h”
    // 其它C 头文件
}
这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我们可以用#include 直接引用这些头文件。

 

6.对于不修改成员变量的函数,都应该定义成const函数。

 

先看了这些,以后想到再补充。


推荐阅读
  • 本文详细探讨了 Java 中定义宏的方法,并与 C++ 中的 `#define` 用法进行了对比。通过具体示例,深入解析了两者在预处理阶段的不同机制及其应用场景,帮助开发者更好地理解和选择合适的宏定义方式。 ... [详细]
  • Android数组截取技巧及JNI数组交互在仓库构建中的应用分析
    在Android开发中,数组截取技巧和JNI数组交互在仓库构建中的应用具有重要意义。JNI提供了两种主要的数组处理方法:一是生成原生层数组的副本,二是直接通过数组指针进行操作。在进行字符串处理时,如果需要执行其他复杂操作,可以结合这两种方法以提高效率和灵活性。此外,合理利用这些技术可以显著提升应用程序的性能和稳定性。 ... [详细]
  • 安装Qt时,Qt\Qt5.x.x文件夹下自动安装了example文件夹,其中包含了大量的示例。这里根据Examples\Qt-5.5\widgets\t ... [详细]
  • 深入解析Android中图像资源的内存占用问题及其优化策略
    在Android开发过程中,图像资源的内存占用是一个值得关注的问题。本文将探讨图像内存占用与哪些因素相关,包括设备性能的影响,并提供一系列优化策略,帮助开发者有效管理图像资源,提升应用性能。 ... [详细]
  • Java包功能详解:初学者指南(附带教学视频解析)
    本文详细解析了Java包的功能及其对初学者的重要性,并通过教学视频进行辅助讲解。文章首先介绍了包的主要作用,包括避免类和方法的命名冲突以及便于管理和组织大量的Java类。随后,逐步引导读者了解工具包中的各个工具类,如StringUtil等,并详细说明了如何配置CLASSPATH环境变量,确保项目中能够正确引用这些类。 ... [详细]
  • 本文介绍了一个基于C++标准库实现的INI文件读写操作类。该类在现有网络资源的基础上进行了扩展和优化,增加了获取当前可执行文件路径和宽字节与多字节字符串转换的功能。通过这些增强功能,该类能够更好地适应各种应用场景,提高代码的可移植性和健壮性。具体实现细节请参见 `IniFileSTL.h` 文件。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
  • 在 Linux 环境下,深入探讨 GTK+3.0 的高级开发技巧,涵盖组件定制、事件处理及多线程应用等核心内容,帮助开发者提升应用界面的交互性和性能。 ... [详细]
  • 在非MFC项目中集成和应用MFC库的功能与优势
    在非MFC项目中集成和应用MFC库,可以充分利用MFC提供的丰富功能和优势。本文探讨了如何在不同类型的C++工程中(如Win32控制台应用程序、Win32项目等)引入MFC库,详细介绍了集成方法及其带来的性能提升和开发效率的提高。通过实例分析,展示了在非MFC项目中使用MFC库的具体步骤和注意事项。 ... [详细]
  • WinForms应用程序中的高效双缓冲技术优化方法
    在探讨WinForms应用程序中高效的双缓冲技术优化方法时,网络上的资料往往杂乱无章,缺乏清晰的解释。本文总结了多种优化方案,包括但不限于:第一种方案,通过设置控件的DoubleBuffered属性来减少屏幕闪烁;第二种方案,自定义绘图方法以提高性能;第三种方案,利用重载WndProc方法拦截绘制消息。此外,还结合实际代码示例,详细解析了每种方案的实现原理和应用场景,帮助开发者更好地理解和应用双缓冲技术。 ... [详细]
  • 本文深入探讨了 `const` 和 `readonly` 关键字在编程中的核心区别及其具体应用场景。`const` 主要用于声明不可变的常量,确保其值在编译时即确定且不可更改。相比之下,`readonly` 允许在构造函数中对字段进行初始化,并在对象创建后保持不变。文章详细分析了这两种关键字的语法特点、使用场景以及它们在不同编程环境下的优劣。此外,还提供了多个示例,帮助读者更好地理解和应用这些概念。 ... [详细]
  • 深入解析C语言中的大小端字节序存储机制
    在C语言中,当编译器执行“创建变量”的指令时,会为该变量在内存中分配相应的存储空间。对于整型变量,其值通常以二进制补码形式存储。此外,不同系统采用的大端或小端字节序对数据的实际存储方式有显著影响,理解这些机制有助于开发者更好地控制数据的读写过程。 ... [详细]
  • PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化
    PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化 ... [详细]
  • 深入解析Go语言的编译与执行流程
    上一篇我们探讨了Golang在多种操作系统中的安装方法,并通过一个经典的HelloWorld示例进行了实践。在此过程中,我们使用了`gorun`命令,该命令能够一次性完成从源代码编译到程序执行的全过程。本文将深入剖析这一流程,揭示其背后的机制。实际上,`gorun`的功能可以视为`go build`与直接运行可执行文件的结合。在Golang的构建过程中,`go build`工具负责将源代码编译成二进制文件,这是生成可执行程序的关键步骤。 ... [详细]
  • 幻方是一种独特的数学结构,由1至N×N的数字组成N×N的矩阵,其中每一行、每一列以及两条对角线上的数字之和均相等。对于奇数阶的幻方,可以通过特定的方法进行构建。首先,将数字1放置在第一行的中间位置,然后按照一定的规则逐步填充其余数字,最终形成一个完美的幻方。这种构造方法不仅展示了数学的美妙,还为研究者提供了一个探索数字排列规律的独特视角。 ... [详细]
author-avatar
sx-March23
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有