当前位置: 首页 > news >正文

泊头哪里建网站呢360浏览器网页

泊头哪里建网站呢,360浏览器网页,怎么做网站内容添加,重庆新闻发布会标准库中的string#xff1a;C初阶学习第六弹——string#xff08;1#xff09;——标准库中的string类-CSDN博客 前言#xff1a; 在前面我们已经学习了如何使用标准库中的string类#xff0c;但作为一个合格的程序员#xff0c;我们不仅要会用#xff0c;还要知道如…标准库中的stringC初阶学习第六弹——string1——标准库中的string类-CSDN博客 前言 在前面我们已经学习了如何使用标准库中的string类但作为一个合格的程序员我们不仅要会用还要知道如何实现string中的类函数等内容今天我们就来讲解一下string的模拟实现 目录 一、string类的构造 二、string类的拷贝构造 三、string类的析构函数 四、string类的运算符重载 1、operator的传统写法 2、operator的现代写法 五、代码实例 六、总结 string的模拟实现中最重要的就是string类的构造、拷贝构造、赋值运算符重载以及析构函数 接下来我们就围绕这些重点进行学习 一、string类的构造 首先我们要清楚string类在底层实际上就是一个字符指针和许多类函数所以它的类成员变量就是 private:char* _str; 我们先把模拟构造给出来再来讲解 //为了区分标准库我们用String class String { public:String(const char* str ){if (str nullptr){assert(false);return;}_str new char[strlen(str) 1];strcpy(_str, str);}void String_print(){cout _str endl;} private:char* _str; }; int main() {String s1(abc);s1.String_print();return 0; } 运行结果 相信一定有细心的朋友已经注意到我们在给参数时并没有给任何东西原因如下 还有一点需要注意的是我们在赋值时是创建一个新空间来储存并不是直接赋值这就涉及深拷贝的问题了在下面我们讲拷贝构造的时候能更清晰的体现出来 二、string类的拷贝构造 模拟实现的代码如下 String(const String s): _str(new char[strlen(s._str) 1]){strcpy(_str, s._str);}在这里我们主要来讲解一下深拷贝和浅拷贝的问题我们放在一个完整的代码实例 class String { public:String(const char* str ){if (str nullptr){assert(false);return;}_str new char[strlen(str) 1];strcpy(_str, str);}String(const String s): _str(new char[strlen(s._str) 1]){strcpy(_str, s._str);}void String_print(){cout _str endl;} private:char* _str; }; int main() {String s1(abc);s1.String_print();String s2(s1);s2.String_print();return 0; } 运行结果 错误示范 三、string类的析构函数 由于string类对象不管以哪个方式创建时都需要用new来开辟空间所以string的析构函数写法为 ~String(){if (_str) //检查一下_str是否为空如果为空就不用再释放空间了{delete[] _str;_str nullptr;}}四、string类的运算符重载 string类的运算符重载整体来说没啥难度在这里我们也不做过多讲解重点来讲解一下operator的两种写法 1、operator的传统写法 String operator(const String s){if (s._str ! _str){char* ptr new char[strlen(s._str) 1]; //1是因为要多开辟一个空间存放\0strcpy(ptr, s._str);delete _str; //清空_str中可能有的数据_str ptr;}return *this;}2、operator的现代写法 String operator(String s) {swap(_str, s._str); //swap函数算法库中存在所以可以直接使用return *this; } 单从篇幅上来比较现代写法要比传统写法精简的多那么它们两个究竟是如何实现它们的功能的呢我们看下面的分析 · 传统写法 传统写法函数的参数是后值的引用我们通过创建一个新的字符指针并开辟空间接受后值再把这个新创建的指针的地址传给我们的对象从而实现了operator的功能 · 现代写法 现代写法则聪明的使用了算法库中的swap函数从而让函数达到一个很精简的效果该函数的参数是后值的临时拷贝本来就是深拷贝所以通过swap交换即可 传统写法和现代写法的过程比较 五、代码实例 //为了区分标准库我们用String class String { public:String(const char* str ){if (str nullptr){assert(false);return;}_str new char[strlen(str) 1];strcpy(_str, str);}String(const String s): _str(new char[strlen(s._str) 1]){strcpy(_str, s._str);}//现代写法String operator(String s){swap(_str, s._str);return *this;}传统写法//String operator(const String s)//{// if (s._str ! _str)// {// char* ptr new char[strlen(s._str) 1]; //1是因为要多开辟一个空间存放\0// strcpy(ptr, s._str);// delete _str; //清空_str中可能有的数据// _str ptr;// }// return *this;//}void String_print(){cout _str endl;}~String(){if (_str) //检查一下_str是否为空如果为空就不用再释放空间了{delete[] _str;_str nullptr;}} private:char* _str; }; int main() {String s1(abc);s1.String_print();String s2(s1);s2.String_print();String s3 s2;s3.String_print();return 0; } 运行结果 六、总结 以上就是string模拟实现的比较重要的部分其他类函数我们并没有写出来但难度都不大感兴趣的老铁可以自己摸索一下或者在网上搜一下它的实现 感谢各位大佬观看创作不易还请一键三连
http://www.yingshimen.cn/news/148278/

相关文章:

  • 龙泉建设局网站橙光文字游戏制作工具
  • vc6.0做网站电商是干嘛的
  • 网站建设教学企业网站备案系统
  • 学校asp网站自己的网站在哪做的忘了
  • 正规网站建设公司多少钱广告公司招聘哪些职位
  • 厦门微信商城网站建设嵌入式开发培训班费用大概多少
  • 注销网站 注销主体安微省建设庁官方网站
  • 青岛seo网站管理公司网站格式
  • 起公司名称大全免费网站vs2017js网站开发方法
  • 社交网站只做dw个人网页制作步骤
  • 十堰优化网站排名公司php做的网站建设
  • 昆仑万维做网站wordpress 前台不显示内容
  • 手机4g建立网站wordpress+评论顺序
  • php网站开发概念和简介外贸网站建设深圳
  • 网站建设类的公司名怎么起wordpress可以做手机网
  • 国内网站是cn还是com深圳做网站公司地点
  • 如何写网站建设方案wordpress接入外网域名
  • 武邑县网站建设公司网站新款模板
  • pc网站建设和推广获取免费域名
  • 网站栏目分类备案增加网站
  • 设计网站案例大连网建科技
  • 南宁住房和城乡建设局网站做外贸 网站
  • 北京 网站设计公司介绍一个电影的网站模板下载
  • 飞飞cms悠悠电影网站广州安全教育平台登录
  • 如何提高网站seo排名百度网站推广网络
  • 发帖推广seo学堂
  • 百度做营销网站多少钱建站公司建的网站能改动吗
  • 做任务推广网站洛阳疾控最新通告今天
  • wordpress登陆后台总是跳转首页网站搜索优化怎么做
  • 广东网站备案审核时间群晖wordpress 外网很慢