C++常见问题的总结

2023-05-16

1、C语言跟C++的关系:

(1)C语言跟C++的本质区别:

           1)、c更倾向于面向过程,c++是面向过程+面向对象+泛型编程

           2)、c解决问题的思路如何通过一个过程来实现我们想要的功能,更注重的是算法;c++是             先构造一个对象模型,然后通过调用成员函数来实现相应的功能

           3)、C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有                  new/delete关键字。

          4)、C++支持函数重载,C不支持函数重载 

          5)、C++中有引用,C中不存在引用的概念

 (2)C语言跟C++的结构体区别:

          1)、c的结构体不能定义函数,但c++的可以

          2)、c的空结构体大小为0,c++的为1

   (3)  g++如何调用c库函数:

          1)、在c库的.h文件中对于函数的声明前要加extern "C",告诉g++不要对以下的函数名重命名

          2)、如何区分此时用的是g++还是gcc?(1、g++中有__cplusplus这个宏,gcc没有;

                2、sizeof(‘字符常量’)g++结果是1,gcc是4)

2、malloc和free、new和delete的问题

(1)malloc和free、new和delete的区别:

  1. malloc和free是标准c库的函数,new和delete是c++的运算符
  2. Malloc需要强制类型转换,而new不需要
  3. Malloc需要计算开辟空间的大小,而new不需要

(2)为什么有了malloc和free,还要有new和delete?

      因为malloc和free是c库函数,不会自动调用构造和析构,而new和delete会.。这样就会产生内存泄漏。

3、引用和指针的区别:

 (1)本质区别:

      引用是变量的别名,是直接访问变量,指针存放的是变量的地址,需要单独开辟空间,访问变量是间接访问

(2)形式上的不同:

(1)引用不开辟空间,指针开辟空间

(2)引用必须初始化,指针可以不用初始化

(3)引用自加是变量自加,指针自加表示指针向地址增大的方向移动了一个数据

(4)指针可以赋值为NULL,但引用没有

(5)有void *类型的指针,但是没有void类型的引用

(6)指针有二级指针,但引用没有

(7)指针有函数指针、数组指针,但引用没有

(8)指针只能指向字符串常量,但常引用可以是任何类型常量的别名

4、Static的作用:

在C语言:

1、修饰局部变量延长了生命周期 2、修饰全局变量限制了作用域;修饰函数限制了作用域

在c++:

(1)修饰成员变量:

1、类内声明类外定义,因为static修饰的成员变量在编译阶段就开辟了空间,而类的定义不开辟空间,声明不开辟空间。2、属于整个类,所有对象共享;先于对象而存在 。3、如果是私有的,可以通过留static的成员函数作为公有的接口,在类外直接通过类名访问。 4、如果是公有的,可以直接在类外通过类名::被访问。

(2)修饰成员函数:

  1. 可以直接通过类名加作用域访问
  2. 没有this指针,不能访问非静态成员
  3. 非静态的成员函数可以访问静态成员

5、const的作用: 

1、在C++中:

(1)const修饰成员函数:

  1. const修饰的成员函数中不能修改任何成员变量的值
  2. Const看似在修饰成员函数,实则是在修饰这个成员函数的第一个形参this
  3. 常成员函数只能调用常成员函数

(2)const修饰的对象:

  1. 不能作为左值
  2. 只能调用const修饰的成员函数
  3. 不能修改成员变量的值

2、在C语言中:

    1、对变量声明只读特性,保护变量值以防被修改。

    2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。

6、重载、覆盖、重写的区别: 

(1)重载:功能类似,函数名相同,参数不同(个数和类型),与返回值无关

    特征:相同范围(同一个类中)、函数名字相同、参数不同、virtual关键字可有可无

(2)覆盖:子类覆盖父类的虚函数,实现接口的重用

   特征:不同范围(基类和派生类)、函数名字相同、参数相同、基类中必须有virtual关键字(必须是虚函数)

(3)重写:子类定义了与父类一模一样的虚函数

  特征:不同范围(父类和子类)、函数名字相同、参数不同或者参数相同且无virtual关键字 

7、虚函数是怎么实现的 

每一个含有虚函数的类都至少有有一个与之对应的虚函数表,其中存放着该类所有虚函数对应的函数指针(地址),

类的示例对象不包含虚函数表,只有虚指针;

派生类会生成一个兼容基类的虚函数表。

8、什么情况下会调用拷贝构造函数(三种情况)

1)用类的一个对象去初始化另一个对象的时候

2)当函数的参数是类的对象时,就是值传递的时候,如果是引用传递则不会调用

3)当函数的返回值是类的对象或者引用的时候

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++常见问题的总结 的相关文章

  • ROS-Python

    用python来编写ros话题 服务方面常用的几个点 xff1a 话题topic 1 初始化节点 rospy init node 34 节点名字 34 举例 xff1a rospy init node 34 test 34 anonymou
  • 关于SBUS信号在单片机中的一些个人理解

    最近一直在弄关于SBUS的编码与解码这方面的内容 xff0c 虽然网上资料很多 xff0c 但是网上资料太杂 xff0c 我找的一些资料可能是我理解的问题 xff0c 所以我摒弃了一些骚操作 xff0c 对于一些单片机学得不精的人来说 xf
  • C++中的指针

    以下为本人大一时阅读 C 43 43 Primer Plus 关于指针的章节所做的笔记 指针 一个函数只能返回一个值 xff0c 但是如果使用指针来传递变量 xff0c 则可以修改更多的值 xff0c 可以达到返回不止一个值的效果 用指针作
  • 四旋翼建模

    文章整理于 xff1a 共轴八旋翼无人飞行器姿态与航迹跟踪控制研究 彭程点击打开链接
  • 最新定时更新:Spring Cloud 各个版本整理汇总。最新为2022,Kilburn版本

    网址 xff1a https spring io 英文中文终结版本boot大版本boot代表说明Angel安吉尔SR61 2 X1 2 8GABrixton布里克斯顿SR71 3 X1 3 8GACamden卡梅登SR71 4 X1 4 2
  • 深度学习(23):SmoothL1Loss损失函数

    0 基本介绍 SmoothL1Loss是一种常用的损失函数 xff0c 通常用于回归任务中 xff0c 其相对于均方差 MSE 损失函数的优势在于对异常值 如过大或过小的离群点 的惩罚更小 xff0c 从而使模型更加健壮 SmoothL1L
  • Jetson Nano\NX\AGX 学习笔记

    Jetson Nano NX AGX 学习笔记 1 jetson平台安装pytorch torchvision2 yolov5模型部署deepstream x86 jetson平台2 0 下载 96 deepstream6 1 96 2 1
  • jetson系列硬件性能对比

    参考 Jetson Modules https developer nvidia com embedded jetson modules 第一种 4G 价格 1000元 1x 4K30 2x1080p60 4x1080p30 4x720p6
  • 遍历_EPROCESS->ObjectTable->HandleTableList链表枚举进程

    include lt ntifs h gt include lt ntddk h gt UCHAR PsGetProcessImageFileName in PEPROCESS Process HANDLE PsGetProcessInhe
  • Ubunut18.04安装Autoware1.12

    官方提供了两种安装Autoware的方法 xff1a Docker和Source两种方式 下边以Ubuntu18 04环境为例 xff0c 记录Source的安装方法 1 配置要求 1 1硬件 1 2软件 Qt安装 qmake span c
  • PuTTY在远程连接服务器之后,经常会断线提示“Software caused connection abort”,而且经常在很短的时间内就失去连接

    解决方案如下 xff1a 第一步 xff1a 设置服务器 1 修改服务器中 etc ssh sshd config 文件 xff0c 将LoginGraceTime的值设为0 xff0c TCPKeepAlive 设为yes 2 servi
  • Go语言循环语句

    Go语言循环语句 资料参考至菜鸟教程 在不少实际问题中有许多具有规律性的重复操作 xff0c 因此在程序中就需要重复执行某些语句 以下为大多编程语言循环程序的流程图 xff1a Go语言提供了以下几种类型循环处理语句 xff1a 循环类型描
  • Lua 协同程序(coroutine)

    Lua 协同程序 coroutine 参考文章 xff1a 菜鸟教程 https zhuanlan zhihu com p 480357405 https zhuanlan zhihu com p 76249973 Lua 协同程序 cor
  • Lua 变量

    Lua 变量 参考至菜鸟教程 变量在使用前 xff0c 需要在代码中进行声明 xff0c 即创建该变量 变量需要标识类型是因为编译程序执行代码之前需要知道如何给语句变量开辟存储区 xff0c 用于存储变量的值 Lua变量有三种类型 xff1
  • Lua 函数 - 可变参数

    Lua 函数 可变参数 参考至菜鸟教程 Lua函数可以接收可变数目的参数 xff0c 和C语言类似 xff0c 在函数参数列表中使用三点 表示函数有可变的参数 span class token keyword function span s
  • Lua 运算符 - 较为特殊部分

    Lua 运算符 较为特殊部分 参考至菜鸟教程 算术运算符 操作符描述实例 乘幂A 2 输出结果 100 负号 A 输出结果 10 整除运算符 gt 61 lua5 3 5 2 输出结果 2 在 lua 中 xff0c 用作除法运算 xff0
  • python(9):python循环打印进度条

    1 while 循环 Python的while循环可以打印进度条 xff0c 可以使用tqdm这个库来实现 tqdm是一个用于在Python中添加进度条的库 xff0c 它可以很容易地集成到while循环中 下面是一个简单的示例 xff0c
  • 平衡车直立PID调节总结

    苦战一周 xff0c 终于使平衡小车站了起来 xff0c PID无疑是我从学习板子至今遇到最困难的东西了 xff0c 并不是说它原理有多么复杂 xff0c 只是想让小车的效果更佳 xff0c 调参的过程无疑是漫长而艰难的 连续调了俩天的参数
  • Lua 字符串

    Lua 字符串 参考至菜鸟教程 字符串或串 String 是由数字 字母 下划线组成的一串字符 Lua 语言中字符串可以使用以下三种方式来表示 xff1a 单引号间的一串字符 双引号间的一串字符 与 间的一串字符 以上三种方式的字符串实例如
  • Lua 迭代器

    Lua 迭代器 参考文章 xff1a 菜鸟教程 https cloud tencent com developer article 2203215 迭代器 xff08 iterator xff09 是一种对象 xff0c 它能够用来遍历标准

随机推荐

  • Lua table(表)

    Lua table 表 参考至菜鸟教程 Lua table 使用关联型数组 xff0c 你可以用任意类型的值来作数组的索引 xff0c 但这个值不能是 nil Lua table 是不固定大小的 xff0c 你可以根据自己需要进行扩容 Lu
  • Lua 模块与包

    Lua 模块与包 参考至菜鸟教程 模块类似于一个封装库 xff0c 从 Lua 5 1 开始 xff0c Lua 加入了标准的模块管理机制 xff0c 可以把一些公用的代码放在一个文件里 xff0c 以 API 接口的形式在其他地方调用 x
  • Lua 文件I/O

    Lua 文件I O 参考至菜鸟教程 Lua I O 库用于读取和处理文件 分为简单模式 xff08 和C一样 xff09 完全模式 简单模式 xff08 simple model xff09 拥有一个当前输入文件和一个当前输出文件 xff0
  • Lua 错误处理

    Lua 错误处理 参考至菜鸟教程 程序运行中错误处理是必要的 xff0c 在我们进行文件操作 xff0c 数据转移及web service 调用过程中都会出现不可预期的错误 如果不注重错误信息的处理 xff0c 就会造成信息泄露 xff0c
  • Lua 调试(Debug)

    Lua 调试 Debug 参考至菜鸟教程 Lua 提供了 debug 库用于提供创建我们自定义调试器的功能 Lua 本身并未有内置的调试器 xff0c 但很多开发者共享了他们的 Lua 调试器代码 Lua 中 debug 库包含以下函数 x
  • Lua 垃圾回收

    Lua 垃圾回收 参考至菜鸟教程 Lua 采用了自动内存管理 这意味着你不用操心新创建的对象需要的内存如何分配出来 xff0c 也不用考虑在对象不再被使用后怎样释放它们所占用的内存 Lua运行了一个垃圾收集器来收集所有死对象 xff08 即
  • Lua 面向对象(详解)

    Lua 面向对象 xff08 详解 xff09 参考文章 xff1a https blog csdn net linxinfa article details 103254828 https zhuanlan zhihu com p 115
  • Lua实现矩阵的加减乘除

    Lua实现矩阵的加减乘除 参考文章 xff1a https blog csdn net qq 54180412 article details 122943327 https www bilibili com video BV1434y18
  • ubuntu系统配置大恒相机驱动并读取ros话题

    文章目录 0 说明1 安装大恒相机sdk1 1 下载1 2 安装sdk 用于配置ip和调试相机参数 1 电脑网卡配置 网卡固定ip 2 查看相机图像以及配置相机参数 2 安装ros驱动包 注 xff1a 大恒相机官方没ros驱动 2 0 正
  • C++类对象与Lua之间的交互

    C 43 43 类对象与Lua之间的交互 C语言与Lua进行交互 xff0c 我们可以相对轻易的做到 xff0c 但在实际应用中我们更加偏向于使用C 43 43 与Lua进行交互 xff0c 面向对象编程 关于C语言与Lua之间的调用交互实
  • C++与Lua交互实例 -- 矩阵的加减乘除(版本一)

    C 43 43 与Lua交互实例 矩阵的加减乘除 xff08 版本一 xff09 关于lua中封装的类模板以及相关知识可参考以下链接 xff1a https ufgnix0802 blog csdn net article details
  • C++与Lua交互实例 -- 矩阵的加减乘除(版本二)

    C 43 43 与Lua交互实例 矩阵的加减乘除 xff08 版本二 xff09 TIPS xff1a 关于使用矩阵的加减乘除测试C 43 43 与Lua的交互以及下面没讲述到的知识点可以阅读第一版 xff1a https blog csd
  • Windows下LuaBridge2.8的环境配置及简单应用

    Windows下LuaBridge2 8的环境配置及简单应用 LuaBridge2 8下载链接 xff1a https github com vinniefalco LuaBridge tags 关于Lua的环境配置可参考以下链接 xff0
  • Lua 开发过程中常见坑

    Lua 开发过程中常见坑 Lua next span class token keyword return span G span class token punctuation span span class token function
  • 私网与公网地址转换

    私网与公网地址转换 NAT概述NAT功能静态NAT动态NATEASYIP xff08 多个内网地址对一个接口 xff09 PAT端口多路复用 NAT概述 NAT xff08 Network Address Translation xff0c
  • VWmare安装CentOS7及连接Xshell超详细过程(图文)

    VWmare安装CentOS7及连接Xshell超详细过程 xff08 图文 xff09 前言一 准备工作二 安装虚拟机过程 1 选择文件 xff0c 新建虚拟机 2 选择配置类型 3 自定义硬件配置 4 进入系统安装界面 二 连接Xshe
  • rpm与yum

    rpm与yum 前言一 应用程序与命令系统的关系二 典型应用程序的目录结构三 常见的软件封装类型四 rpm 1 概述 2 命令概述 3 查询rpm软件包信息 查询已安装的rpm软件信息 查询未安装的rpm软件包文件中的信息 安装 升级 卸载
  • Linux用户与权限管理

    Linux用户与权限管理 前言一 管理用户账号 1 用户账号概述 用户标识UID xff08 User IDentity xff0c 用户标识号 xff09 用户账号文件 2 用户账号管理 添加用户账号 xff08 useradd xff0
  • yum源仓库

    yum源仓库 前言一 yum介绍一 yum源的提供方式 1 配置本地仓库 2 配置ftp源 三 yum命令 1 yum常用的操作 2 搜索软件包命令 3 安装升级 4 软件卸载 5 yun history命令 总结 前言 yum相对与rpm
  • C++常见问题的总结

    1 C语言跟C 43 43 的关系 xff1a xff08 1 xff09 C语言跟C 43 43 的本质区别 xff1a 1 xff09 c更倾向于面向过程 xff0c c 43 43 是面向过程 43 面向对象 43 泛型编程 2 xf