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

news2024/12/23 23:57:52

前言

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

给大家整理了一下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.coloradmin.cn/o/1499979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解BS期权定价

开局放图 1.完整图示 开局一张图&#xff01;全篇编的尽可能通俗化&#xff0c;有些地方避免不了用公式解释&#xff0c;内容的完整流程图示绘制如下&#xff0c;建议全篇读完后再看流程图。 2.背景知识 期权介绍 首先简单介绍下期权背景知识&#xff0c;期权&#xff08;O…

Gitlab: PHP项目CI/CD实践

目录 1 说明 2 CI/CD 2.1 部署方式一&#xff1a;增量部署 2.1.1 目标服务器准备 2.2.2 Gitlab及Envoy脚本 2.2 部署方式二&#xff1a;镜像构建与部署 2.2.1 推送到私有化容器仓库 准备工作 脚本 要点 2.2.2 推送到hub.docker.com 准备工作 脚本 3 参考&#x…

Take-home questions——L3

Match the spatial domain image to the Fourier magnitude image 1—D 2—B 3—A 4—E 5—C

一分钟安装使用教程,无需服务器,一台电脑就可使用!全网最快速便捷使用Claude 3方法!

随着AI的应用变广&#xff0c;各类AI程序已逐渐普及&#xff0c;尤其是在一些日常办公、学习等与撰写/翻译文稿密切相关的场景&#xff0c;大家都希望找到一个适合自己的稳定可靠的ChatGPT软件来使用。 ChatGPT-Next-Web就是一个很好的选择。它是一个Github上超人气的免费开源…

如果用户被诱导添加了证书甚至根证书,那哪怕用了 HTTPS,使用中间人攻击就可以窃取用户所有信息了?

最近突然想到一个问题&#xff0c;HTTPS 真的足够安全吗&#xff1f;在一些对安全性要求比较高的项目里&#xff0c;能只依赖 HTTPS 来保证数据安全吗&#xff1f; 我们也用过fiddler 、whistle 等代理软件&#xff0c;也知道要能劫持流量后能看到请求和返回的内容需要添加证书…

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办?

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办&#xff1f; 在订阅 ChatGPT Plus 时&#xff0c;有时候会出现以下报错 &#xff1a; We are unable to authenticate your payment method. 我们未能验证您的支付方式。 出现 unable to a…

Apollo决策规划 - EM planner

旨在对b站老王所讲的百度Apollo - EM planner算法做浓缩版总结 0 决策规划背景 基于图搜索 优点&#xff1a; 可以得到全局层面最优解&#xff0c;适用于比较低维数的规划问题 缺点&#xff1a; 规划问题维数较高时&#xff0c;面临指数爆炸问题 基于采样 优点&#xff1a;…

各大厂商常用的弱口令集合

Oms呼叫中心 KXTsoft2010 Glodon控制台 admin TRENDnet趋势网络摄像头 admin/admin MOBOTIX-视频监控 admin/meinsm 思科Cisco 没有原始密码, 第一次登录时需要创建 DRS admin/1234 Honeywell admin/1234 安迅士Axis root/pass, 新安迅士摄像头在用户第一登录时要求创建…

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形,superTabControl标签字体大小不匹配

一、前言 superTabControl做的浏览器标签(cefsharp)在缩放比例(125%,150%时字体不协调) 物联网浏览器,定制浏览器,多媒体浏览器(支持H264)参考栏目文章即可 二、配置参数 app.manifest参数 dpiAware =true <application xmlns="urn:schemas-microsoft-c…

保持自律,改变形象,认真对待自己

不知道一年365天里究竟有多少个节日&#xff0c;昨天网络上刚过了“女生节”&#xff0c;今天又来了“三八妇女节”。笔者从来都是女权支持者&#xff0c;但也主张切勿支持过了头而形成“女尊男卑”&#xff0c;认为应当遵循“顺其自然”这一规律为好。 有鉴于此&#xff0c;本…

LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS

TOC 1 前言2 方法2.1 LOW-RANK-PARAMETRIZED UPDATE MATRICES 1 前言 1) 提出背景 大模型时代&#xff0c;通常参数都是上亿级别的&#xff0c;若对于每个具体任务都要去对大模型进行全局微调&#xff0c;那么算力和资源的浪费是巨大的。 根据流形学习思想&#xff0c;对于数…

基于SSM的房客源信息管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SSM框架 3 1.2 Vue框架 3 1.3 ECharts 3 1.4 JQuery技术 3 1.5 本章小结 4 2系统分析 5 2.1 需求分析 5 2.2 非功能需求 8 2.3 本章小节 8 3 系统设计 9 3.1 系统总体设计 9 3.1.1 系统体系结构 9 3.1.2 系统目录结构 9 3…

高效办公-浏览器基本操作

日常我们使用电脑&#xff0c;其实很大部分是用于网络功能&#xff0c;这里面除了客户端程序剩余的就是通过我们的浏览器获取信息或者使用业务系统了&#xff0c;这里就简单学习下浏览器基本常识与操作。 一、浏览器是什么&#xff1f; 白话讲浏览器就是一个软件&#xff0c;我…

Docker安装Redis (全网最详细教程!!!)

一、Redis简介 二、简易版本启动&#xff08;学习版&#xff09; 1、一条命令直接搞定 2、docker ps 命令&#xff0c;查看本机docker运行的容器 3、docker logs 查看日志 4、测试连接 5、优缺点 三、生产版本启动 四、Docker 停止、删除、重启、启动容器 一、Redis简介…

mysql的语法学习总结3(一些常见的问题)

执行后&#xff0c;MySQL 会重新加载授权表并更新权限。 FLUSH PRIVILEGES; 怎么检查自己的电脑端口3306有没有被占用&#xff1f; ESTABLISHED表示被占用&#xff0c;LISTENING表示端口正在被监听&#xff0c;22696是占用该端口的进程的PID&#xff08;进程标识符&#xff0…

手持气象站的优势

【TH-SQ5】手持气象站作为一种便携式的气象监测设备&#xff0c;具有许多显著的优势&#xff0c;主要体现在以下几个方面&#xff1a; 便携性&#xff1a;手持气象站设计精巧&#xff0c;重量轻&#xff0c;易于携带&#xff0c;这使得用户能够轻松地在不同地点进行气象观测&a…

常见数据类型

目录 数据类型 字符串 char nchar varchar varchar2 nvarchar 数字 number integer binary_float binary_double float 日期 date timestamp 大文本数据 大对象数据 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 数…

通俗深入的理解Sora的架构原理

作者公众号 大数据与AI杂谈 &#xff08;TalkCheap&#xff09;&#xff0c;转载请标明出处 开始之前&#xff0c;先解释一下为什么深入和通俗这两个看似自相矛盾的词可以并列在这里。因为后续的一些文章可能也是类似的思路&#xff0c;所以先简单做一下文章定位的说明。要看正…

it-tools工具箱

it-tools 是一个在线工具集合&#xff0c;包含各种实用的开发工具、网络工具、图片视频工具、数学工具等 github地址&#xff1a;https://github.com/CorentinTh/it-tools 部署 docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:lat…

ConGMC

employ I I I(A, B) to represent mutual information Z u v f u → v ( Z u ) Z_{uv}f_{u\to v}(Z_u) Zuv​fu→v​(Zu​) 辅助信息 作者未提供代码