C++经典面试题之---String类

2023-10-27

前段时间,S2的徐*同学去了一家作核能的企业做软件测试,在应聘的时候出了这样一道题目。
写出string类的构造函数,拷贝构造函数,析构函数,赋值函数。
 
这道题目是一道相当经典的C++开发题目,是面试C++程序员时经常考的,但这次无奈徐*碰上了,为什么呢?因为徐* 入职后作的是白盒测试。


#include<iostream>
using namespace std;

class String
{
public:
       String(const char *str=NULL);
       String(const String &other);
       ~String(void);
       String &operator =(const String &other);
private:
       char *m_data;
};

String::String(const char *str)
{
    cout<<"构造函数被调用了"<<endl;
    if(str==NULL)//避免出现野指针,如String b;如果没有这句话,就会出现野
                  //指针
   {
        m_data=new char[1];
        *m_data=''/0'';
    }
    else
    {
      int length=strlen(str);
      m_data=new char[length+1];
      strcpy(m_data,str);
    }
}
String::~String(void)
{
    delete m_data;
    cout<<"析构函数被调用了"<<endl;
}

String::String(const String &other)
{
 cout<<"赋值构造函被调用了"<<endl;
 int length=strlen(other.m_data);
 m_data=new char[length+1];
 strcpy(m_data,other.m_data);
}
String &String::operator=(const String &other)
{
      cout<<"赋值函数被调用了"<<endl;
      if(this==&other)//自己拷贝自己就不用拷贝了
                 return *this;
      delete m_data;//删除被赋值对象中指针变量指向的前一个内存空间,避免
                    //内存泄漏
      int length=strlen(other.m_data);//计算长度
      m_data=new char[length+1];//申请空间
      strcpy(m_data,other.m_data);//拷贝
      return *this;
}
void main()
{
      String b;//调用构造函数
      String a("Hello");//调用构造函数
      String c("World");//调用构造函数
      String d=a;//调用赋值构造函数,因为是在d对象建立的过程中用a来初始化
      d=c;//调用重载后的赋值函数
}

这个题目因为类中有指针变量,使得在建立对象和析构对象的过程中涉及到深拷贝和浅拷贝的问题,还涉及到如何避免内存泄漏的问题。
感觉这道题目,充分考察了C++的一些基本功。学习C++最好的办法,就是找些经典的例题,然后对照编译器来进行学习,肯定会事半功倍的。
 
这道题目已调试通过,可直接运行。

文章出处:http://www.diybl.com/course/3_program/c++/cppsl/20071218/92698.html




FROM: http://blog.csdn.net/shiwei0124/article/details/4417831

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

C++经典面试题之---String类 的相关文章

  • chromebook刷_使用Chromebook编码

    chromebook刷 Chromebooks are awesome They re relatively simple and inexpensive devices that run Chrome OS a stripped down
  • 【linux】基本工具gcc/g++及Makefile

    文章目录 一 程序翻译过程 1 程序的翻译过程 2 理解选项的含义 3 动态链接与静态链接 二 Linux项目自动化构建工具 make Make le 1 背景 2 实例说明 3 原理 4 语法 5 为什么gcc不更新文件 6 推导规则 三
  • eclipse svn 忽略文件夹

    以忽略 target 文件夹为例 window gt preferences gt team gt Ignored Resource gt Add Pattern gt 新建一个 target gt ok 再次同步可见traget下所有文件
  • 2023华为OD机试真题Java实现【食堂供餐/二分法】

    题目内容 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 在 WSL2 上部署 PyTorch

    开发项目需要使用AI 但是我习惯用 VMware 来开发各类项目 于是查到 Enable NVIDIA CUDA on WSL 可以实现 CUDA VGPU 的功能 但是国内对这类资料较少 我就想顺便补个空白 在 WSL2 上部署 PyTo
  • <金融产品>京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...

    导读 2014年是京东金融全力奔跑的一年 2015年京东金融业务将会在三个方面发力 上线股权众筹平台 发力农村金融和校园金融 2014年 凭借京东白条 京保贝 京东众筹等产品 京东金融迅速在互联网金融领域占领一席之地 京东CEO刘强东对京东
  • 阅读论文的方法

    清单一 系统阅读论文的方法 1 试着找个安静的地方呆上几个小时 拿上你最喜欢的饮料 可能是咖啡 茶 或者别的什么东西 我经常在咖啡厅里工作 2 从阅读标题和摘要开始 目的是获得论文的高层次概述 作者的主要目标是什么 以及一些实验结果 摘要通
  • 华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

    一 题目描述 又到了一年的末尾 项目组让小明负责新年晚会的小礼品发放工作 为使得参加晚会的同时所获得的小礼品价值相对平衡 需要把小礼品根据价格进行分组 但每组最多只能包括两件小礼品 并且每个分组的价格总和不能超过一个价格上限 为了保证发放小

随机推荐

  • npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\licc\package.json'

    问题描述 在项目中使用npm安装gulp时报异常 node modle文件夹出不来 异常输出如下 npm WARN enoent ENOENT no such file or directory open C Users licc pack
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

    目录 前言 环境 导出yolov5s模型 编写Maven项目 编写pom xml文件 引入opencv依赖 下载opencv 获取opencv的jar包和动态链接库dll文件 将lib文件夹添加为Library 将yolov5权重文件放到资
  • C 中strcpy和memcpy的区别

    参考博客 https blog csdn net zcyzsy article details 53190691 https www cnblogs com metootxy p 3185000 html 一 以下是具体使用memcpy这个
  • 浅谈 Computed和Watch的区别

    computed 计算属性 类似于过滤器 对绑定到试图的数据进行处理 并监听变化进而执行对应的代码 基于它的依赖缓存 只有相关依赖发生改变时才会重新取值 而使用methods时 在重新渲染的时候 函数总会重新调用执行 computed属性默
  • Linux 虚拟化网络技术 — 虚拟网线(Veth-pair)

    虚拟网线 Veth pair Veth pair 不是一个设备 而是一对设备 作为虚拟网线用于连接两个虚拟网络设备 veth pair 是根据数据链路层的 MAC 地址对网络数据包进行转发的过程来实现的 本质是反转通讯数据的方向 需要发送的
  • C++Easyx教程(一)——如何在DEV-C++里安装Easyx库

    本文作者 C 橙羊 本文代码适合编译环境 DEV C 温馨提示 此文乃作者心血 如要转载请标注版权 否则视为抄袭 今天就算是我们Easyx教程的第一篇博文的诞生日了 那么今天橙羊就教大家如何在DEV C 里安装Easyx图形库 这里我用的是
  • 电子学会青少年C语言一级通过

    复习一级时 看了很多printf格式 整型 浮点型之类的问题 这就是考级 什么都考 覆盖面广 但考完不一定常用 计划继续报二级 主要考数组和字符串 三级开始考算法 其实可以考虑跨级报考 因为感觉每个级的内容相对独立 有人考了一级就考四级 五
  • 蛋白质结构域的概念_怎么查询蛋白质的全部信息 UniProKB数据库

    今天给大家介绍一个数据库 UniProKB数据库 网址http www uniprot org 这个数据库对于查询蛋白质相关信息还是很全面的 比如我们想要查询人类p53蛋白的主要功能 结构域 翻译后的修饰和参与的代谢途径 以及与它相互作用的
  • HTTP1.0和HTTP1.1

    什么是HTTP http是一个超文本传输协议 它是基于TCP协议的应用层传输协议 简单点说就是客户端和服务端进行数据传输的一种规则 http是一个无状态协议 它本身不会对发送过得请求和响应的通信状态进行持久化处理 这样做的目的是为了保持ht
  • 高效扩展性的全新Apple Mac Pro:专为专业工作流程与编程而设计

    随着科技的不断发展和专业工作需求的增加 全新的Apple Mac Pro应运而生 这款Mac Pro具备卓越的性能和出色的扩展功能 为专业人士提供了一个强大的工作平台 本文将探讨Mac Pro的特点 并提供一些适用于专业工作流程和编程的源代
  • 原生js实现分页功能

    原生就是实现分页功能 代码如下 var pagination function option fun this parentId option id 容器 this pageSize option pageSize 1 每页显示多少条 th
  • 参数校验(javax.validation)学习

    一 应用场景 页面表单有很多字段需要提交 因此使用注解校验的方式针对pojo的属性进行校验 因此使用javax标准以及org hibernate的validator的注解校验 二 依赖
  • Java面试题收集(三)

    目录 1 Java7 8 中的 HashMap 和 ConcurrentHashMap 全解析 2 Spring的AOP关于拦截private 3 项目中的数据字典缓存实现方式 4 分布式缓存 5 如何保证分布式数据最终一致性 6 spri
  • 已证实!这就是抗击疫情最有效的“药物”!

    不 出 门
  • Python如何添加日志输出

    导入logging模块 import logging 创建一个日志器 就是一个logger对象 logger logging getLogger logger 设置logger输入级别 logger setLevel logging DEB
  • python简单实现网络爬虫

    前言 在这一篇博客中 我会用python来实现一个简单的网络爬虫 简单的爬取一下一些音乐网站 小说网站的标题 关键字还有摘要 所以这个爬虫并不是万能爬 只针对符合特定规则的网站使用 只使用于爬标题 关键字和摘要的 所以只能爬在head标签中
  • 奇门遁甲原始宫位图_奇门遁甲排盘方法和步骤

    阅读本文前 请您先点击上面的蓝色字体 撩到阴阳 再点击 关注 这样您就可以免费收到文章 免费订阅 请放心关注 奇门遁甲真传 一 起局方法 拆补法 1 阴遁起局方法 夏至以后用阴遁 奇门遁甲是宇宙学 是时间和空间相结合的一门学问 所以我们必须
  • C++批量文件重命名

    include
  • python类的简单定义和使用

    http www 01happy com python class define use python中类的声明使用关键词class 可以提供一个可选的父类或者说基类 如果没有合适的基类 那就用object作为基类 定义格式 class 类
  • C++经典面试题之---String类

    前段时间 S2的徐 同学去了一家作核能的企业做软件测试 在应聘的时候出了这样一道题目 写出string类的构造函数 拷贝构造函数 析构函数 赋值函数 这道题目是一道相当经典的C 开发题目 是面试C 程序员时经常考的 但这次无奈徐 碰上了 为