C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】

前言

总结整理不易,希望大家点赞收藏。

给大家整理了一下C++程序设计中的重点概念,以供大家期末复习和考研复习的时候使用。


C++程序设计系列文章传送门:
第一章 面向对象基础
第四/五章 函数和类和对象
第六/七/八章 运算符重载/包含与继承/虚函数和多态性
第九/十一/十二章 模板/输入/输出流/标准模板库
C++程序设计-练手题集合


文章目录

  • 前言
  • 第四章 函数 函数和类和对象
    • 4.1 说明带参数的宏与内联函数有什么不同
    • 4.2 全局变量和局部变量有什么区别是怎么实现的操作系统和编译器是怎么知道?
  • 第五章 类和对象
    • 5.1 C中的Class和C++的 struct有什么区别
    • 5.2 数组与链表有什么区别各有什么优缺点
    • 5.3 简述成员函数全局函数和友元函数这些概念的异同
    • 5.4 完整举例const限定符的作用,跟C语言的const有什么区别
    • 5.5 完整举例static关键字的作用,跟C语言Java中的static有什么区别?
    • 5.6 构造函数是否有返回值类型?
    • 5.7 什么是拷贝构造函数?在什么情况下被调用?
    • 5.8 什么是深拷贝?什么是浅拷贝?他们有什么区别?
    • 5.9 头文件中的infdef/deifine/endif有什么区别?
    • 5.10 什么时候友元是有用的?说明使用友元的优缺点
  • 6 练手题
  • 下一章传送门


不重要的章节我们直接跳过,因此直接从第一章跳到第四章

第四章 函数 函数和类和对象

4.1 说明带参数的宏与内联函数有什么不同

1、编译器处理方式不同:带参数的宏是在预处理阶段进行处理,它会将所有使用该宏的地方直接替换成宏定义中的代码,并且没有任何类型检查和错误检查。而内联函数是在编译阶段进行处理,编译器会将内联函数的代码插入到函数调用的地方,可以进行类型检查和错误检查。
2、参数求值次数不同:带参数的宏在被调用时,宏定义中的代码会被简单地文本替换,因此宏参数的求值次数可能比较多,这可能会导致不符合预期的行为。而内联函数在被调用时,参数的求值次数与普通函数相同。
3、代码生成方式不同:带参数的宏在被处理时,每次都会生成新的代码,这可能会导致生成的代码量较大。而内联函数在编译时被处理成了一份代码,可以被多次使用,这有助于减小代码量,提高代码的可读性和可维护性。
4、调试方式不同:带参数的宏在调试时可能会产生困难,因为调试器看到的是宏定义中的代码,而不是调用宏时的代码。而内联函数则可以通过调试器进行单步调试,从而更容易地进行调试。

4.2 全局变量和局部变量有什么区别是怎么实现的操作系统和编译器是怎么知道?

操作系统和编译器通过符号表(symbol table)来识别和管理变量。
1、作用域不同:全局变量在整个程序中都可以访问,而局部变量只在它所在的代码块可以访问。
2、存储位置不同:全局变量存储在程序的数据段中,而局部变量通常存储在栈或寄存器中。
3、生命周期不同:全局变量的生命周期与程序的运行时间一致,而局部变量的生命周期只存在于其所在的代码块中,在离开该代码块时会被销毁。

第五章 类和对象

5.1 C中的Class和C++的 struct有什么区别

默认访问权限:在 C++ 中,class 的默认访问权限是私有的,而 struct 的默认访问权限是公有的。
继承:class 支持私有继承、公有继承和保护继承,而 struct 只支持公有和保护继承。
模板参数限制:class 作为模板参数时可以是任何类型,而 struct 只能作为模板参数用于构建类型。这是因为 Class 可以包含成员函数和成员类型,而 struct 只能包含成员变量和成员类型。

5.2 数组与链表有什么区别各有什么优缺点

内存分配方式:数组在内存中是连续的一段空间,而链表中的节点可以存储在任意位置,通过指针链接。
访问元素的方式:数组可以通过下标直接访问元素。而链表需要从头节点开始顺序遍历。
插入和删除元素的效率:数组在插入和删除元素时需要移动其他元素,时间复杂度为O(n)。而链表在插入和删除元素时只需要修改指针,时间复杂度为O(1)。
优缺点:数组的优点是访问元素快速,而链表的优点是插入和删除元素快速。在需要频繁访问元素但不需要频繁插入和删除元素时,数组是一个更好的选择。而在需要频繁插入和删除元素但不需要频繁访问元素时,链表是更好的选择。此外,链表可以支持动态分配内存,而数组在声明时需要确定大小。

5.3 简述成员函数全局函数和友元函数这些概念的异同

成员函数是一个属于类的函数,它可以访问类的私有成员变量和保护成员变量。成员函数可以被类的对象调用,并且可以重载。
全局函数是一个在任何类或命名空间之外定义的函数。全局函数不属于任何类,不能访问类的私有成员变量和保护成员变量。全局函数也可以重载。
友元函数是一个定义在类外部但是有权访问类私有成员的非成员函数。友元函数必须在类定义中进行声明,并且可以访问类的所有私有成员变量和保护成员变量。友元函数也可以重载。
异同点:
定义位置:成员函数定义在类的内部,全局函数和友元函数定义在类的外部。
访问权限:成员函数可以访问类的私有成员变量和保护成员变量,而全局函数和友元函数不能访问类的私有成员变量和保护成员变量。
调用方式:成员函数必须通过类的对象调用,而全局函数和友元函数可以直接调用或通过对象调用。
重载:成员函数、全局函数和友元函数都可以重载。
归属关系:成员函数属于类,而全局函数和友元函数不属于任何类。
作用范围:成员函数的作用范围限定于类的对象,而全局函数和友元函数的作用范围不受限制。

5.4 完整举例const限定符的作用,跟C语言的const有什么区别

在C语言中,用const修饰的变量,其本质上还是个变量,可以通过指针来修改该变量的值。在C++中 ,在编译的时候,当碰到用const修饰的变量时,编译器是直接将变量的值和变量的符号对应起来一起存到符号表中。不会为const变量分配空间。在编译的时候如果前面有extern和取地址符 & 时,会为变量分配存储空间是为了兼容C语言

5.5 完整举例static关键字的作用,跟C语言Java中的static有什么区别?

在C语言中,static关键字可以用于函数和变量,用于函数时表示该函数只能在当前文件中被调用,用于变量时表示该变量只能在当前文件中被访问。在C++中,static关键字可以用于类的成员变量和成员函数,用于成员变量时表示该变量是类的静态成员,所有对象共享该变量,用于成员函数时表示该函数是类的静态成员函数,可以直接通过类名调用。

5.6 构造函数是否有返回值类型?

构造函数没有返回值类型。

5.7 什么是拷贝构造函数?在什么情况下被调用?

拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const类型,不可变的。例如:类X的拷贝构造函数的形式为X(const X & x)。
调用情况:
1、当用类的一个对象去初始化该类的另一个对象的时候。
2、如果函数的形参是类的对象,调用此函数的时候,进行形参和实参相结合时,拷贝构造函数被调用。
3、如果函数的返回值是类的一个对象,函数执行完成返回调用者时,会建立一个匿名对象,在对匿名对象进行拷贝构造。

5.8 什么是深拷贝?什么是浅拷贝?他们有什么区别?

浅拷贝:当编写一个类时,并且没有添加拷贝构造,此时系统会默认添加一个拷贝构造(浅拷贝)。浅拷贝是指:创建一个新对象时,把对象的初始属性都复制一份,若是存在引用类型,则拷贝的是其内存地址,当它的值发生改变时,另一个的值也会受到改变。若存在析构函数,可能会出现析构多次的情况。
深拷贝:深拷贝就是将对象从内存中完全拷贝出来,并且重新开辟一片空间来进行存放,当其中一个值发生改变时并不会影响另一个的值,两者互不影响。

5.9 头文件中的infdef/deifine/endif有什么区别?

当多个文件中同时包含相同的头文件,将头文件放到#ifndef/#deifne#endif中防止大量冲突。#ifndef <标识> #define <标识> … … #endif

5.10 什么时候友元是有用的?说明使用友元的优缺点

友元是一种定义在类外部的普通函数,但它需要在类体内进行声明,为了与该类的成员函数加以区别,在声明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。
friend ostream& operator<<(ostream& _cout, const Date& d);
友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

6 练手题

在这里插入图片描述

下一章传送门

第六/七/八章 运算符重载/包含与继承/虚函数和多态性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUDA入门之统一内存

原文来自CUDA 编程入门之统一内存 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质…

Python元组(Tuple)深度解析!

目录 1. 什么是元组&#xff1f; 2. 创建元组 3.访问元组 4.元组的运算 5.修改元组不可行 6.元组的应用场景 前面的博客里&#xff0c;我们详细介绍了列表&#xff08;List&#xff09;这一种数据类型&#xff0c;现在我们来讲讲与列表相似的一种数据类型&#xff0c;元组…

使用Docker安装运行RabbitMQ---阿里云服务器

目录 0、阿里云没开端口的得要去安全组规则去添加&#xff1a; 1、下载RabbitMQ镜像&#xff1a; 2、查看镜像是否下载成功&#xff0c;得到docker镜像id&#xff1a; 3、运行RabbitMQ: 4、查看RabbbitMQ容器是否启动成功&#xff1a; 5、启动RabbitMQ中的插件管理 6、访…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的人群密度检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发人群密度检测系统对于公共安全等领域具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个人群密度检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型…

Python 读取写入excel文件

使用Python读取和写入excel的xlsx、xls文件 目录 读取xlsx文件 安装三方库 引入三方库 读取数据 打开文件 表名 最大行数 最大列数 读取一张表 读取整个文件 返回xls整体内容 安装三方包 读取内容 写入xls文件 引入三方库 创建文件并写入数据 报错及解决 报错…

KBL610-ASEMI开关电源专用KBL610

编辑&#xff1a;ll KBL610-ASEMI开关电源专用KBL610 型号&#xff1a;KBL610 品牌&#xff1a;ASEMI 封装&#xff1a;KBL-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;6A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a;4 …

项目解决方案:视频监控接入和录像系统设计方案(下)

目 录 1.概述 2. 建设目标及需求 2.1建设总目标 2.2 需求描述 ​2.3 需求分析 3.设计依据与设计原则 3.1设计依据 3.2 设计原则 4.建设方案设计 4.1系统方案设计 4.2组网说明 5.产品介绍 5.1视频监控综合资源管理平台介绍 5.2视频录像服务器和存储 5.2.…

MySQL--优化(索引--聚簇和非聚簇索引)

MySQL–优化&#xff08;索引–聚簇和非聚簇索引&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、聚簇索引 聚簇索引&#xff1a;将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存…

ChatGPT无法登录,提示我们检测到可疑的登录行为,将阻止进一步的尝试。请与管理员联系

1. 问题描述 之前本来已经连续稳定使用ChatGPT好几个月了&#xff0c;但是今天尝试登录ChatGPT的时候&#xff0c;却提示&#xff1a;我们检测到可疑的登录行为&#xff0c;将阻止进一步的尝试。请与管理员联系。 此外&#xff0c;我还在网上看到了一些相关的消息&#xff0c;…

3D资产管理

3D 资产管理是指组织、跟踪、优化和分发 3D 模型和资产以用于游戏、电影、AR/VR 体验等各种应用的过程。 3D资产管理也称为3D内容管理。 随着游戏、电影、建筑、工程等行业中 3D 内容的增长&#xff0c;实施有效的资产管理工作流程对于提高生产力、减少错误、简化工作流程以及使…

【Android 内存优化】KOOM 快手开源框架线上内存监控方案-源码剖析

文章目录 前言OOMMonitorInitTask.INSTANCE.initOOMMonitor.INSTANCE.startLoopsuper.startLoopcall() LoopState.Terminate dumpAndAnalysisdumpstartAnalysisService回到startLoop方法总结 前言 这篇文章主要剖析KOOM的Java层源码设计逻辑。 使用篇请看上一篇: 【Android …

基于el-tree实现懒加载穿梭条

一、关键代码 <template><div><!-- 左侧待选列表 --><div class"left-box"><p>待选列表</p><el-input placeholder"输入关键词过滤" v-model"leftFilterText" clearable/><el-treeref"tree…

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

颜色检测python项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 什么是颜色检测&#xff1f; 颜色检测是检测任何颜色名称的过程。很简单不是吗&#xff1f;嗯&#xff0c;对于人类来说&#xff0c;这是一项极…

荔枝派zero驱动开发06:GPIO操作(platform框架)

参考&#xff1a; 正点原子Linux第五十四章 platform设备驱动实验 一张图掌握 Linux platform 平台设备驱动框架 上一篇&#xff1a;荔枝派zero驱动开发05&#xff1a;GPIO操作&#xff08;使用GPIO子系统&#xff09; 下一篇&#xff1a;更新中… 概述 platform是一种分层思…

static的用法和作用

从三个方面来讲述static的用法和作用&#xff0c;分别是静态局部变量和静态函数以及静态成员 1. 在一个函数中定义静态局部变量的时候&#xff0c;该静态局部变量的生命周期将贯穿整个程序的运行期&#xff0c;而不会像局部变量一样函数运行结束的时候就被销毁。 #include &…

华为北向网管NCE开发教程(1)闭坑选接口协议

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 华为北向网管NCE开发教程&#xff08;4&#xff09;&#xff08;源代码接口…

网络地址转换协议NAT

网络地址转换协议NAT NAT的定义 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址&#xff08;即仅在本专用网内使用的专用地址&#xff09;&#xff0c;但现在又想和因…

如何打造定制化企业内训系统?企培源码开发实战教学

在当今竞争激烈的商业环境中&#xff0c;企业内训系统的建立和定制化已成为提高企业竞争力和员工素质的关键。本文将探讨如何打造定制化企业内训系统&#xff0c;并介绍企培源码开发的实战教学。 第一步&#xff1a;需求分析与规划 建立定制化的企业内训系统之前&#xff0c…

echarts绘制雷达图

<template><div><div>【云端报警风险】</div><div ref"target" class"w-full h-full" stylewidth&#xff1a;200px;height:300px></div></div> </template><script setup> import { ref, onMounte…