首页 > 其他分享 >oop对象使用过程中,调用了什么方法

oop对象使用过程中,调用了什么方法

时间:2024-03-28 15:32:37浏览次数:30  
标签:调用 函数 对象 构造 oop Test 函数调用 构造函数

探索

探索oop代码中,类对象定义、声明、初始化、赋值、引用等过程中,调用了什么函数。

假设 Test类 有带参构造函数,拷贝构造函数,重载赋值运算符,析构函数等。

1、Test类 只有一个成员变量

    /*
    C++编译器对于对象构造的优化:
    用临时对象生成新对象的时候,临时对象就不产生了,直接构造新对象就可以了
    Test(20)显示生成临时对象--利生存周期:所在的语句
    */
    Test t1= Test(20); // 与Test t1(20);没有区别的!

    Test t2 = t1; // 调用拷贝构造函数
    t2 = Test(10); // 调用右侧的有参构造函数 和 =的重载函数

    t2 = (Test)10; // 显示类型转换,调用合适的有参构造函数构造临时对象,同上

    t2 = 10; //隐式类型转换,同上



    Test *p= &Test(40); //p指向的是一个已经析构的临时对象,临时对象作用域只是本语句
    const Test &ref=Test(50); // 不会析构,因为引用是起了别名

 2、Test类 有两个成员变量,并且有带默认参数的构造函数

3、Test类 已有带默认参数的构造函数。分析非成员函数调用过程中,形参实参局部变量的函数调用

清晰知道对象函数调用过程,对代码优化至关重要!

优化

1、函数参数传递过程中,对象优先按照引用传递,不要按值传递

        传递引用相当于传递指针,减少了形参的构造和析构函数调用

2、函数返回对象的时候,优先返回临时对象,而不是返回定义过的对象

        减少了定义对象的构造和析构函数调用

        注:1)函数返回时,函数会在main函数的栈帧上构造出临时对象,再赋值给main函数中调用处接收返回值的对象。                                                                                                                                        2)用临时对象拷贝构造一个新对象的时候,编译器会优化成直接调用相应带参构造函数直接构造新对象

3、 接收 返回值是对象 的函数返回值的时候,优先按初始化的方式接收,不要按赋值的方式接收

        可以节省在main函数栈帧构造临时量的过程,和主函数中构造对象的过程

标签:调用,函数,对象,构造,oop,Test,函数调用,构造函数
From: https://blog.csdn.net/qq_20756957/article/details/137088567

相关文章

  • vue3子组件给父组件传参,父组件给子组件传参,在父组件中直接调用子组件中的某个方法
    vue3子组件给父组件传参,父组件给子组件传参,在父组件中直接调用子组件中的某个方法1、子传父,以传递id为例子:constemit=defineEmits(['passId']);//在需要传递的参数的地方写,id为需要传递的参数emit('passId',id); 父://引入子组件constSonPage=defineAsyncCo......
  • Postman传对象失败解决
    文章目录情景复现解决方案总结情景复现postman中调用debug发现pId传入失败分析解释:实体类中存在pId、uid和num字段controller层将GoodsCar作为请求体传入解决方案当时觉得很奇怪,因为uid和num可以被接收,而pId和num的数据类型相同,因此觉得可能是变量名的问题......
  • 栈结构-对象形式
    之前实现栈是通过js数组实现的,其实也可以用对象形式来实现.classStack{constructor(){//用一个count属性来记录栈的大小this.count=0this.obj={}}}向栈顶插入元素即通过对象新增属性count和元素值item的形式即可.classStack{co......
  • 计算机java项目|Springboot基于Hadoop的物品租赁系统的设计与实现
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • Day49:WEB攻防-文件上传&存储安全&OSS对象&分站&解析安全&解码还原&目录执行
    目录文件-解析方案-目录执行权限&解码还原目录执行权限解码还原文件-存储方案-分站存储&OSS对象分站存储OSS对象存储知识点:1、文件上传-安全解析方案-目录权限&解码还原2、文件上传-安全存储方案-分站存储&OSS对象文件-解析方案-目录执行权限&解码还原1......
  • Java对象转换失败-Long类型转Integer类型
    对象转换工具类/***转换工具类*/publicclassConvertUtils{privatestaticLoggerlogger=LoggerFactory.getLogger(ConvertUtils.class);publicstatic<T>TsourceToTarget(Objectsource,Class<T>target){if(source==null){......
  • 面向对象语言的全局认识
        学习一门语言,就像在一座陌生的城市旅游,第一步应该找一张这座城市的地图,对这座城市有个整体的了解,然后寻找自己的目的地,不至于迷失方向。    一句话:先整体,再局部。一.从面向过程到面向对象  1.1面向过程的困境        当软件规模超过一定的......
  • 3D开发工具HOOPS更新:高效、轻量化模型处理再突破!
    随着数字化转型的深入发展,高性能图形显示成为了软件开发领域的重要研究方向。在众多工具和库中,HOOPS因其强大的三维图形处理能力而受到广泛关注。HOOPS也与时俱进,持续更进与创新,近期又推出了一系列新功能,这些功能不仅提高了其性能,还大幅拓宽了HOOPS的应用范围,为开发者提供了前......
  • 如何系统得自学python?(基础知识篇完)——12.面向对象
     一、面向对象为了方便了解,我们拿面向过程做一个对比例如:肚子饿了,想吃饭面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃面向对象:点外卖总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情......
  • 深入浅出:探索Hadoop生态系统的核心组件与技术架构
    目录前言HDFSYarnHiveHBaseSpark及SparkStreaming书本与课程推荐关于作者:推荐理由:作者直播推荐:前言进入大数据阶段就意味着 进入NoSQL阶段,更多的是面向OLAP场景,即数据仓库、BI应用等。大数据技术的发展并不是偶然的,它的背后是对于成本的考量。集中式数据库或......