全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详谈C++何时需要定义赋值/复制构造函数

继承和动态内存分配

假设基类使用了动态内存分配,而且定义了析构函数、复制构造函数和赋值函数,但是在派生类中没有使用动态内存分配,那么在派生类中不需要显示定义析构函数、复制构造函数和赋值函数。

当基类和派生类采用动态内存分配时,派生类的析构函数、复制构造函数、赋值运算符都必须使用相应的基类方法来处理基类元素。这种要求是通过三种不同的方式来满足的。对于析构函数。这是自动完成的,也就是说在派生类的析构函数中无需显示调用基类的析构函数。对于构造函数,这是通过在初始化成员列表中调用基类的复制构造函数来完成的,如果不这样做,将自动调用基类的默认构造函数,对于赋值运算符,这是通过使用域解析运算符显示地调用基类的赋值运算符来完成的。

编译器生成的成员函数

1、  默认构造函数

默认构造哈数要么没有参数,要么所有的参数都有默认值。如果没有定义任何构造函数,编译器将定义构造函数。另外,如果派生类构造函数的成员初始化列表中没有显示调用基类构造函数,则编译器将使用基类的默认构造函数来构造派生类对象的基类部分。在这种情况下,如果基类没有构造函数,将导致编译阶段错误。如果定义了某种构造函数,编译器将不会定义默认构造函数。在这种情况下,如果需要默认构造函数,则必须自己提供。(最好的建议就是,一旦自己定义了构造函数,那么最好再定义一个默认的构造函数,这样在别的子类中调用也非常的方便)

提供构造函数的动机之一是确保对象总能被正确地初始化。另外,如果类包含指针成员,则必须初始化这些成员。因此,最好提供一个显示默认构造函数,将所有的类数据成员初始化为合理的值。

2、  复制构造函数

复制构造函数接受其所属类的对象作为参数。在下述情况下,将使用复制构造函数

将新对象初始化为一个同类对象
按值将对象传递给函数
函数按值返回对象
编译器生成临时对象

如果程序没有使用复制构造函数,编译器将提供原型,但不提供函数定义,否则,程序将定义一个执行成员初始化的赋值构造函数。也就是说,新对象的每个成员都被初始化为原始对象相应成员的值。如果成员为类对象,则初始化该成员时,将使用相应类的复制构造函数。

如果使用new初始化的成员指针通常要求执行深度复制,或者类可能包含需要修改的静态变量。在上述情况下,需要定义自己的复制构造函数。

3、  赋值构造函数

默认的赋值运算符用于处理同类对象之间的赋值。不要将赋值与初始化混淆了。如果语句创建新的对象,则使用初始化,如果语句修改已有对象的值,则是赋值。

默认赋值为成员赋值。如果成员为类对象,则默认成员赋值将使用相应类的赋值运算符。如果需要显示定义复制构造函数,则基于相同的原因。也需要显示定义赋值运算符。
 
对于派生类而言,保护成员类似于共有成员,但对于外部而言,保护成员于私有成员类似。派生类可以直接访问基类的保护成员,但只能通过基类的成员函数来访问私有成员。
 
基类的析构函数应当是虚的。这样,当通过指向对象的基类指针或引用来删除派生对象时,程序将首先调用派生类的析构函数,然后调用基类的析构函数,而不仅仅是调用基类的析构函数

如何判断一个指针指向的对象的真实类型,使用C++中的运行时机制,typeid就可以实现目标

以上就是小编为大家带来的详谈C++何时需要定义赋值/复制构造函数全部内容了,希望大家多多支持~


# c  # 赋值构造函数  # C++构造函数+复制构造函数+重载等号运算符调用  # C++中的复制构造函数详解  # 关于C++复制构造函数的实现讲解  # C++中复制构造函数和重载赋值操作符总结  # C++ 复制控制之复制构造函数的实现  # 派生类  # 运算符  # 这是  # 在这种情况下  # 来完成  # 自己的  # 类中  # 也就是说  # 情况下  # 都有  # 最好的  # 一是  # 已有  # 列表中  # 则是  # 而不  # 这样做  # 如果没有  # 三种  # 仅仅是 


相关文章: 如何通过宝塔面板实现本地网站访问?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  Python如何创建带属性的XML节点  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何通过老薛主机一键快速建站?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  建站之星后台管理如何实现高效配置?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何高效生成建站之星成品网站源码?  ,购物网站怎么盈利呢?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何挑选优质建站一级代理提升网站排名?  淘宝制作网站有哪些,淘宝网官网主页?  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何做静态网页,sublimetext3.0制作静态网页?  活动邀请函制作网站有哪些,活动邀请函文案?  宝塔新建站点为何无法访问?如何排查?  制作电商网页,电商供应链怎么做?  IOS倒计时设置UIButton标题title的抖动问题  如何选择适配移动端的WAP自助建站平台?  已有域名如何快速搭建专属网站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站主机选哪家性价比最高?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  nginx修改上传文件大小限制的方法  如何在阿里云ECS服务器部署织梦CMS网站?  建站之星如何助力企业快速打造五合一网站?  如何零基础在云服务器搭建WordPress站点?  建站之星代理如何优化在线客服效率?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  香港服务器部署网站为何提示未备案?  如何快速配置高效服务器建站软件?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  广州美橙建站如何快速搭建多端合一网站?  如何快速搭建高效香港服务器网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  临沂网站制作公司有哪些,临沂第四中学官网?  MySQL查询结果复制到新表的方法(更新、插入)  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何在Windows 2008云服务器安全搭建网站?  如何通过可视化优化提升建站效果? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。