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

学校网站建设代码门户网站建设询价公告

学校网站建设代码,门户网站建设询价公告,模板之家如何免费下载,三端网站如何做C类用三个特殊的成员函数:复制构造函数、赋值操作符和析构函数 来决定类对象之间的初始化或赋值时发生什么。所谓的“复制控制”即通过这三个成员函数控制对象复制的过程 复制构造函数首先是一个构造函数,它同所有其他的构造函数一样与类同名&#xff0…

C++类用三个特殊的成员函数:复制构造函数、赋值操作符和析构函数 来决定类对象之间的初始化或赋值时发生什么。所谓的“复制控制”即通过这三个成员函数控制对象复制的过程

复制构造函数首先是一个构造函数,它同所有其他的构造函数一样与类同名,没有返回值。它有一个唯一的参数(错误),是该类类型的引用(一般将它声明为const,源于用于赋值的对象一般不用改变它本身的值)。于是复制构造函数的原型为:

class BOOK
{public:BOOK(const BOOK& rhs); //构造函数一BOOK(string &name,float price = 0):_bookName(name),_price(price){}; //构造函数二BOOK():_price(0),_bookName(""){}; //构造函数三private:float _price ;string _bookName;//....
};

什么时候被调用
复制构造函数在需要复制类对象的时候被调用,这些调用情况可以总结为:
根据一个同类型的对象显示或隐式地初始化一个对象。
1.当定义一个新对象并用一个同类型的对象对它进行初始化的时候,将显式使用复制构造函数,如:


BOOK book1;
BOOK book2(book1);

当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式地调用复制构造函数。
1.作为值传递的实参传递给一个函数。
2.函数返回时复制一个对象。
3.初始化顺序容器中的元素。
  如:

vector<string> svec(5);

编译器首先调用string类默认构造函数创建一个临时值,再用复制构造函数将临时值复制到每一个元素。
1.根据元素初始化列表初始化数组元素。
  如:

BOOK books[]={string("book1"),string("book2"),string("book3"),BOOK();

book数组的前三个元素将调用构造函数二进行隐式类型转换(C++隐式类型转换),然后调用复制构造函数进行数组元素的复制。如果类禁止隐式类型转换(构造函数使用了explicit声明),或希望不指定实参或多个实参,需要使用完整的构造函数语法,如数组最后一个元素的初始化。

如果没有为类声明复制构造函数会怎样

如果你没有声明一个复制构造函数,那么编译器会给声明一个。实际上,如果你自己没有声明,编译器会为类声明一个复制构造函数 ,一个赋值操作符以及一个析构函数,此外如果你没有声明任何构造函数的话,编译器也会为你声明一个合成默认构造函数。(错误)所有这些编译器自动生成的类成员函数皆为pubilc 且 inline。编译器创建的复制构造函数单纯地将来源对象的每一个非static成员拷贝到目标对象,这在很多时候是不能满足类需求的,特别是类中含有指针时,这时候就需要我们自己来写复制控制的三个特殊成员函数了。

编译器合成的复制构造函数做了什么

合成复制构造函数的行为是:对每一个非static成员进行逐个成员初始化。成员类型不同,初始化方式不一样:
  
内置类型(如int):直接复制值。

类类型:调用该类的复制构造函数进行复制。

数组:这个比较特殊,因为我们知道一般不能复制数组,但在类中,复制数组时合成复制构造函数将复制数组的每一个值。

另外,合成复制构造函数对类数据成员的初始化都是放在构造函数初始化列表中进行的。

禁止复制

如果我们想禁止某个类的复制行为,我们当然不会想去定义一个复制构造函数,然而编译器却会自动为我们定义一个,那么到底该如何阻止一个类的复制行为呢?

我们可以将复制构造函数定义为private,不允许用户代码复制该类类型的对象,若进行复制将在编译时发生错误。然而类的友元和成员仍可以进行复制,解决办法是我们可以声明一个private复制构造函数却不进行定义,类成员或友元进行复制尝试时,将在程序运行时发生错误。


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/3Zqhgt

http://www.yayakq.cn/news/540898/

相关文章:

  • 用哪个网站做简历更好推广方式线上线下
  • 阜阳网站建设工作室发软文提高网站权重
  • 镇江门户网站会员登录系统网站建设
  • 怎么建立属于自己的网站造价师资格证
  • 网站建设 要维护么什么网站可以做产品入驻
  • 商业网站需要的外贸网站价格
  • 公众号视频网站开发网站优化如何提高排名
  • 苏州建站公司 诚找苏州聚尚网络平面设计师培训
  • 做网站的计划书wordpress zerif lite
  • 平顶山网站建设企业网站建设与实施调研报告基本情况
  • 买书的网站排名郑州 网站建设有限公司
  • wordpress免费网页建站app开发公司杭州
  • 全球网站排名前100福建厦门网站建设
  • tv做后缀的动漫网站开发公司网站设计
  • 网站备案时要不要关闭外贸人才网论坛
  • 网站制作项目潍坊建设厅网站
  • 网站建设项目开发水文化建设网站
  • 昆明做网站猫咪科技jsp网站开发实例视频
  • 私自使用他人图片做网站宣传山西网站建设报价单
  • 电商网站竞价推广的策略哪个网站可以做付费推广
  • asp 微信网站长沙网络推广哪家好
  • 网站和微信同步建设昆明电子商务网站
  • 英雄联盟网站建设公司网站建设 费用
  • 国内wordpress主题网站泳衣服饰东莞网站建设
  • 专业定制网站开发广州 网站 建设
  • 做服装搭配图的网站有哪些在线平面设计软件免费版
  • 番禺网站推广公司求手机网址
  • 前端的网站重构怎么做个人网站 空间
  • 个人网站开发协议汕头网站制作找哪家
  • 阳江房产网站网站海外seo