您好!欢迎来到源码码网

C++primerPlus随记

  • 源码教程
  • 来源:源码码网
  • 编辑:admin
  • 时间:2020-05-13 16:35
  • 阅读:621

1.在析构函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。使用new的类通常需要包含显示复制函数和执行深度复制的赋值运算符。(见下2)


2.StringBad sports("Spainshu leavea"); //StringBad 是一个类 调用的构造函数形式为:

StringBad ( const char *s);

StringBad sailor=sports; //用一个对象初始化另一个对象,调用的构造函数形式为:

 (1)StringBad ( const StringBad & st) {   //复制构造函数

 num_strings++;

len=st.len; str=new char[len+1];  std::strcpy(str,st.str);   }


(2)还需要编写执行深度复制的类重载赋值运算符:


  StringBad & StringBad::operator=(const StringBAd & st)  {


  if (this==&st) return *this;


 delete [] str; //释放旧的字符串


len=st.len;  str= new char [len+1];  std::strcpy(str,st.str);


return *this;  }


按值传递和返回对象,都调用复制构造函数。按引用传递时,将减少调用构造函数的时间。


3.静态数据,在类声明中声明,在类方法的文件中初始化。静态成员static,不管创建多少个对象,但只创建一个静态成员副本。


将成员函数声明为静态的,则不能通过对象调用静态成员函数,也不能使用this指针。静态成员函数声明放在公有声明部分,可以使用类名和作用解析运算符来调用它


4.如果类中包含了使用new初始化的指针成员,应当自行定义一个复制构造函数,以复制指向的数据,而不是指针,这叫深度复制。浅复制只复制指针信息,不会深入挖掘以复制指针引用的结构。


5.如果有多个构造函数,则都必须以相同的方式使用new,无参数的构造函数有new时:


String::String()


{   len=0;  str=new char[1];  str[0]='�';   } 


析构函数: String::~String() { delete   [ ] str; }


6. String *first=&saying[0];  //将指针初始化为指向已有的对象 


  String * second=neew String(sayings[1]); //用new来初始化指针,创建一个新对象 删除:delete second; //将调用动态对象*second的析构函数。


7. char *buffer = new char [512];


   JustTesting *pc1,*pc2; //  JustTesting是一个类


 pc1=new (buffer) JustTesting;// 此句为定位new运算符   


delete pc1; //不合法 需显示调用析构函数才能销毁对象: pc2->~JustTesting();   


delete  [] buffer; //合法


pc2=new JustTesting ("Heap", 20); //常规new运算符  ...... delete pc2; //合法 ,将自动调用析构函数


8.C++11中空指针:NULL、0、nullptr


9. 对于被声明为引用和const 的类成员,在创建时应当成员初始化列表方式:(这种方法只用于构造函数)


 (1)class Queue { private : .....  int items; .const int qsize;   };   


   Queue::Queue(int qs) : qsize (qs) {  item=0; front =rear=NULL;  }  //


或者  Queue::Queue(int qs) : qsize (qs) , item(0) ,front (NULL), rear(NULL){ }


(2) class Agency{...}


   class Agent { private:  Agency &belong;.....};


   Agent::Agent(Agency &a): belong(a)  {.......}   


10. C++11允许在类定义中初始化。


class Queue


{ private: .....int item=0; ...  const int qsize=Q_SIZE;


};


但使用成员初始化列表的构造函数将覆盖相应的类内初始化。

————————————————


原文链接:https://blog.csdn.net/lvliang2017232003/java/article/details/86515420


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 常用测试压力工具使用介绍
  • 常用测试压力工具使用介绍
  • ab 是 ApacheBench 工具的缩写,它是一个HTTP压力测试工具。让我详细说明如何测试:1. 安装ApacheBenchWindows系统:方法一:安装XAMPP或WAMP(自带ab)下载地址:https://www.apachefriends.org/zh_cn/index.html安装后,ab工具在:C:xamppapacheinab.exe方法二:使
  • 开发工具
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-13 20:27
  • 阅读:58
  • 工程项目一体化自动管理软件解决方案
  • 工程项目一体化自动管理软件解决方案
  • 1.项目概述1.1项目背景在工程建设行业数字化转型浪潮下,传统项目管理面临信息孤岛、协同困难、进度不可控、成本超支等痛点。本方案旨在构建一个覆盖工程项目全生命周期、全参与方、全业务流程的一体化智能管理平台。1.2解决方案愿景打造数据驱动、智能协同、风险预警、自动执行的工程大脑,实现:管理流程自动化率≥80%项目协同效率提升40%成本偏差率降低至±3%以内安全事故发生率降低60%1.3目标用户矩阵┌───────────────┬
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:26
  • 阅读:169
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 第一部分:需求文档1.项目概述1.1项目背景为企事业单位、车队运营商、租赁公司等提供一套完整的车辆全生命周期管理解决方案,实现车辆管理数字化、智能化。1.2项目目标建立车辆从购置到报废的全流程管理体系实现用车申请、调度、监控、结算的闭环管理通过数据分析优化车辆使用效率降低车辆运维成本20%以上1.3用户角色矩阵┌──────────────┬─────────────────────────────┬──────────────
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:11
  • 阅读:157
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档文档版本: V1.0项目目标: 构建一个集环境智能监测、设备自动化控制、生长模型分析、溯源管理与远程指挥于一体的综合物联网管理平台,实现降本增效、提质增产、风险预警与品牌增值。1.系统总体概述1.1核心价值: 数据驱动决策,解放人力,实现农业/渔业生产的精准化、自动化与智能化。1.2用户角色:生产员/养殖员: 现场巡视、接收告警、执行设备手动控制、查看实时环境
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:04
  • 阅读:68
  • 程序员AI编程工具推荐
  • 程序员AI编程工具推荐
  • AI编程工具是当前开发者的“副驾驶”,能够极大提升开发效率。以下我将从通用型、代码专用型、垂直领域型以及开源/自部署型几个维度为您分类推荐,并附上它们的核心特点和适用场景,帮助您选择。一、通用型AI对话助手(编程是核心能力之一)这类工具本质是“更懂代码的ChatGPT”,适合处理广泛的编程问题、解释代码、生成文档等。ChatGPT(GPT-4/4o)简介:行业标杆,尤其在GPT-4版本下,代码理解和生成能力极强。优点:上下文能力强,
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:56
  • 阅读:96
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部