面向对象(二)

在之前已经大概介绍了类的概念,大家对类应该有了初步的了解,今天给大家介绍一个系统提供的六种函数,具体看前四种。

系统提供函数函数的特点:(1)公有的

                                            (2)内联的(无堆栈的开辟和清理,只是在函数调用点展开) 

一、构造函数

作用:初始化对象的内存地址空间,构造函数名与类名相同。

例子:有一个商品类,成员变量有商品名称、商品数量、商品价格。

如上图所示,有两个构造函数,一个是不带参数的构造函数,另一个是带三个参数的构造函数,当我们用类实例化对象时,就会调用对应的构造函数。

CGoods  good1;//调用不带参数的构造函数

CGoods  good2(“面包”,20,5.5);//调用带三个参数的构造函数

注意:1、构造函数可以重载,上图中所示,两个构造函数构成了函数重载。

           2、如果在类中有实现的构造函数,系统就不会调用默认的构造函数。如果没有,系统便会给出默认的构造函数。

           3、实例化对象:(1)分配对象的内存空间

                                       (2)调用对象的构造函数

二、析构函数

作用:释放对象的内存空间所占的资源

注意:1、调用析构函数的时机:在主函数return之后,最后一个右花括号之前。

           2、析构函数没有参数,因为要清理对象所占的资源,所以无法传参。

           3、销毁对象:(1)调用析构函数清理对象所占的资源

                                   (2)清理内存空间

           4、如果在程序中手动调用析构函数,系统还会调用,会发生两次调用同一资源,可能导致系统崩溃,所以不建议手动调用析构函数。

                手动调用析构函数和系统调用析构函数的区别:前者清理对象所占的资源,对象依然存在。后者连着对象一块清理。 

           5、先构造的对象后析构  

三、拷贝构造函数

时机:用一个已经存在的对象去初始化相同类型的新的对象时,调用拷贝构造函数

CGoods good1;

CGoods good2(“面包”,20,5.5);

CGoods good3=good2;//此时需要调用拷贝构造函数

现在有三个拷贝构造函数:

   

当需要调用拷贝构造函数时,分别调用三个拷贝构造函数,结果又会是怎样的呢?

调用第一个拷贝构造函数:第一个拷贝构造函数是浅拷贝,good2和good3指向同一块内存空间,构造的顺序是先good2、good3,所以析构的顺序是good3、good2,析构good3的时候,将申请的内存空间释放,析构good2的时候,指针就会指向一块空的区域,导致崩溃。

调用第二个拷贝构造函数:第二个拷贝构造函数中传入的参数是CGoods的一个实例rhs,因为是传值参数,所以会调用拷贝构造函数,因此。如果允许拷贝构造函数传值,就会在拷贝构造函数中调用拷贝构造函数,就会形成无休止的递归调用,导致栈溢出,因此,C++不允许拷贝构造函数传值参数。

调用第三个拷贝构造函数:结果成功,传的是引用,传入的直接是good2的地址,不会有无休止地调用拷贝构造函数所带来的栈溢出问题。

四、赋值运算符重载函数

时机:用已存在的对象给另一个已存在的对象赋值

例如:good3=good2;

1、系统给出的赋值运算符函数

如果调用系统提供的函数,则会有浅拷贝和内存泄漏问题:红色是没有赋值之前的内存分配,绿色是执行赋值操作后的内存分配,指针1和指针2指向同一块内存,析构时会崩溃,而且第二块内存区域也造成了内存泄漏问题,所以不采用系统提供的函数,用户需自己实现赋值运算符重载函数。

2、用户自己实现的函数

用户自己实现赋值运算符重载函数时需注意以下三点:

(1)防止自赋值

(2)释放旧资源

(3)开辟新资源,进行初始化



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip基于stl_pg版本实现自己的stl库C++源码.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值