C++测试一

2023-11-09

C++测试一

简答题

  1. 说说C和C++的区别?(10分)

    1. C++从范围上基本覆盖C语言,即C++是C语言的一个超集而C语言是C++的一个子集。

    2. C语言是面向过程的编程语言,C++是面向对象的编程语言

    3. C++支持运算符重载

    4. C++支持友元函数

    5. C++支持泛型编程

  2. new/delete和malloc/free的区别?(10分)

    1. 从宏观功能上看,二者都是进行动态内存的申请和释放的,但是从性质上,二者的区别在于new/delete是C++中的关键字(不是函数),malloc/free是C语言中的函数。
  3. 从微观功能上看,new/new[]在使用时会调用类的构造函数,而malloc不会,delete/delete[]在使用时会调用类的析构函数,而free不会。

    1. 从返回值上看,new/new[]返回是对应类型的指针,而malloc则是返回的万能指针void*,使用时需要转换成对应类型的指针。
  4. 从异常机制上看,前者失败了会抛出bad_alloc,后者则是返回NULL

    1. 从申请所需的参数上看,new在意的是类型,而malloc在意的则是大小,当申请多个内存空间时,前者用的时new[],后者只需要给大小
  5. 从释放内存上看,前者new对应delete,new[]对应delete[];而后者一律用free

  6. 指针与引用的区别?(10分)

    1. 指针是实体变量,引用不是实体变量
  7. 指针可以不初始化,而引用则必须初始化

    1. 指针可以初始化为空,但引用不能
  8. 指针可以改变指向,引用则不能修改引用目标

    1. 可以定义指针的引用但是不能定义引用的指针
  9. 可以定义指针的指针,但是不能定义引用的引用

    1. 可以定义数组的引用,但是不能定义引用的数组
  10. C++四种显示类型转换和使用场合(10分)

    1. 静态类型转换:原对象和目标类型在一个方向上可以进行隐式类型转换
    2. 去常属性类型转换:只适用于去除常指针或者常引用的常属性
    3. 重解释类型转换:不同类型的指针之间,或者整数与指针之间的类型转换
    4. 动态类型转换:只适用于有多态关系的父子指针或者引用类型之间的转换
  11. 什么是重载?C++是如何实现重载的?C语言如何调用C++实现的函数?(10分)

    答:在一个类中,当函数名相同但参数不同时即构成重载;C++之所以能对同一作用域下的函数进行重载,是由于G++编译器在编译时,会对函数进行改名操作,形如_Zn函数名形参类型简写 _Z3maxii _Z3maxdd _Z3maxiii。如此参数列表不同的同名函数就构成了重载;

    如果需要在C语言中调用C++的函数,那就必须使用extern "C"来编译C++的代码

  12. 什么是名字空间,名字空间有什么作用?(5分)

    名字空间其实是对代码的逻辑划分,避免名字冲突

    声明名字空间对当前作用域可见

  13. 什么是浅拷贝,什么是深拷贝?(5分)

    对于一般的类型并没有深拷贝和浅拷贝的区别,仅针对指针进行区分。

    浅拷贝仅拷贝内存地址,拷贝完成后两个指针指向同一片内存空间

    深拷贝重新申请内存,将原本的内容拷贝到新申请的地址中,两个指针指向的内存空间不同但内容相同

  14. 什么是构造函数?什么是析构函数?什么是拷贝构造函数?什么是拷贝赋值函数?什么是移动构造函数,什么是移动赋值函数?这些函数分别在什么情况下会被调用?(20分)

    构造函数:在一个类被创建时调用的函数,一般用于初始化类中成员变量或对其进行赋值

    析构函数:在类类型变量消亡时调用的函数,一般是用于释放类类型中成员变量的内存

    拷贝构造函数:通过一个存在的类给另一个类类型变量进行构造

    移动构造函数:将一个存在的类中所有的成员和方法转移给另一个类类型变量,完成移动后原类类型变量消亡。

程序题

1.实现string类的单参构造、拷贝构造、拷贝赋值、析构函数(20分)

class String{
private:
    char *s;
public:
    String(const char *str = nullptr):s(strcpy(new char[str.s?strlen(str.s)+1]:1), str.s?str.s:""){}
    ~String(void){
		if(s != nullptr){
            delete [] s;
            s = nullptr;
        }
    }
    String(const String &str):s(strcpy(new char[str.s?strlen(str.s)+1:1], str.s?str.s:"")){}
    String& operator = (const String& str){
		if(this != &str){
            String _tmp(str);
            swap(s, _tmp.s);
        }
        return *this;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++测试一 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • Web基础知识

    为啥我啥都不知道 在计算机网络技术中 通常涉及两张网 Network和Web Network 主要指硬件网络 包括了TCP IP Transmission Control Protocol Internet Protocol 四层网络体系中
  • tf.nn.conv2d() 参数说明

    tf nn conv2d用法详解 tf nn conv2d 我们已经知道这个函数是用于做二维卷积的 但是他容易和tf layers conv2d 混淆 对于初学者来说 他的参数也不是那么容易理解 只是了解到一点皮毛 并不能一下子就记住 下面
  • Java测试(7)---项目篇

    需求 项目 1 项目启动 了解项目背景 2 需求分析 功能需求 1 文件类型 支持所有文件 2 压缩文件个数 最多压缩100个文件 3 压缩大小 不超过5G 性能需求 1 压缩 解压缩文件不超过30分钟 2 安全需求 带有病毒感染的文件不能
  • 代码随想录算法训练营第四天

    LeetCode 24力扣 两两交换链表节点 采用原地交换 使用tmp节点进行交换前临时节点存储即可 三个一组 package algor trainingcamp import algor junior algor list ListNo
  • MIPI信号简单介绍

    1 MIPI介绍 MIPI是由ARM Nokia ST IT等公司成立的一个联盟 旨在把手机内部的接口如存储接口 显示接口 射频 基带接口等标准化 减少兼容性问题并简化设计 MIPI联盟通过不同的工作组 分别定义一系列手机内部的接口标准 如
  • 字节流与字符流的区别及相互转换

    先来看一下流的概念 在程序中所有的数据都是以流的方式进行传输或保存的 程序需要数据的时候要使用输入流读取数据 而当程序需要将一些数据保存起来的时候 就要使用输出流完成 程序中的输入输出都是以流的形式保存的 流中保存的实际上全都是字节文件 字
  • EL表达式javaweb

    一 JavaBean JavaBean是Java开发语言中一个可以重复使用的软件 它本质上就是一个Java类 为了规范 JavaBean 的开发 Sun 公司发布了 JavaBean 的规范 它要求一个标准的 JavaBean 组件需要道循
  • MeterSphere入参加密踩坑记录

    需求 应公司要求需把项目接口接入MeterSphere Jenkins部署时实现接口自动化测试 项目接口有统一加密方式 所以想写一个统一的前置脚本 减少工作量 ps 我想实现的效果是body里放明文参数 经过前置脚本操作后 把处理后的参数放
  • 如何设置Alfred的Terminal为iterm2

    按以下步骤操作即可 不需要保存 代码立即生效 将以下代码放到上图所示中 on alfred script q if application iTerm2 is running or application iTerm is running
  • Nginx添加nginx_upstream_check_module主动健康检查模块步骤

    1 进入nginx第三方模块存放目录 没有就创建 cd usr local nginx module 下载nginx upstream check module wget https codeload github com yaoweibi
  • 树莓派(Raspberry pi) 使用Pi Imager安装烧录操作系统

    树莓派 Raspberry pi 安装烧录操作系统 最好的方式 土壕的方式 是直接购买了安装好了操作系统的SD卡 拿到树莓派后的第一件事情就是安装烧录操作系统 安装的过程非常简单 在树莓派官方网站上有手把手的安装说明 英语过关的可以直接看
  • 【AI画画教程】无整合包使用LoRA和Dreambooth训练全流程详解(Linux)

    前言 本教程遵循简单原则 不使用任何民间整合包 目前很多AI画画训练整合包臃肿复杂 教程也是名词乱炖 容易对初学者造成理解误差和使用困难 因为许多整合包都依赖于sd scripts库 它自身就能支持绝大多数的训练场景 学会这个后 自己也可以
  • C语言打印9*9乘法表

    C语言9 9乘法表 2d 右对齐 2d 左对齐
  • 《Centos系统——shell脚本判断语句》

    目录 一 掌握表达式测试包括字符串测试 整数测试 文件测试及逻辑测试 1 掌握字符串测试 a 格式 b 例子 2 掌握整数测试 a 格式 b 例子 3 掌握文件测试 a 格式 opr file b 例子 4 掌握逻辑测试 多重判断 b 例子
  • 07-Redis缓存设计

    上一篇 06 Redis缓存高可用集群 1 缓存穿透 缓存穿透是指查询一个根本不存在的数据 缓存层和存储层都不会命中 通常出于容错的考虑 如果从存储层查不到数据则不写入缓存层 缓存穿透将导致不存在的数据每次请求都要到存储层去查询 失去了缓存
  • 当从 Java 进程查看时该主机的主机名称和规范名称不一致。

    查看日志发现是node27 data com 和node27不一致 sed i s data com etc sysconfig network service network restart 最后还没好 第二天我又重新设置了 vim et
  • 基于STM32CubeMX的HC-05蓝牙主从通讯

    基于STM32CubeMX的HC 05蓝牙主从通讯 开发板使用的是stm32f103c8t6 使用STM32CubeMX进行配置 实现两HC 05蓝牙之间主从通讯 HC 05蓝牙模块是主从一体的 两个HC 05之间一主一从通讯 要进入AT模
  • OpenGPT2.0笔记

    还没看完 先放上来 这个乱七八糟的草稿笔记在这就能提醒自己抓紧看 GPT Feature large transformer based language model Training objective predict the next
  • 运营入门——超级运营术

    本来这应该是一篇读书笔记 超级运营术 韩叙 他的微信公众号 运营狗工作日记 本来运营入门的书籍 预备读6本 这是第3本 之前的 全栈市场人 和 运营本源 都做了读书笔记 其实在读这本书时 读书笔记也有做 但最终发现 内容有点多 毕竟本来预计
  • C++测试一

    C 测试一 简答题 说说C和C 的区别 10分 C 从范围上基本覆盖C语言 即C 是C语言的一个超集而C语言是C 的一个子集 C语言是面向过程的编程语言 C 是面向对象的编程语言 C 支持运算符重载 C 支持友元函数 C 支持泛型编程 ne