码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )


    文章目录

    • 一、匿名对象引入
    • 二、匿名对象简介
      • 1、匿名对象概念
      • 2、匿名对象作用域 - 对象创建与销毁
      • 3、代码示例 - 创建并使用匿名对象





    一、匿名对象引入



    匿名对象引入 : 在上一篇博客 【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 中 , 讲到了 如果 类对象 作为函数的返回值 , 返回的是在 函数中 创建的 类实例对象 的 副本 , 其本质是一个匿名对象 ;


    对象值作为函数返回值 : 函数直接返回类的实例对象 值 , 不是返回 指针 或 引用 ;

    // 定义函数, 返回 Student 对象值作为返回值
    Student fun()
    {
    	Student s1(18, 170);
    	return s1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6




    二、匿名对象简介




    1、匿名对象概念


    在 C++ 语言中 ,

    " 匿名对象 " 指的是 没有 显式指定名称 的 类 的 实例对象 ;

    匿名对象 通常用于 临时计算 或 作为函数的 参数 / 返回值 传递 ;


    匿名对象创建语法 :

    类名(构造函数参数)
    
    • 1

    下面的代码 , 就是创建 Student 类的 匿名对象 ;

    Student(12, 170)
    
    • 1

    2、匿名对象作用域 - 对象创建与销毁


    匿名对象 的 作用域 仅限于 创建匿名对象 的 那一句代码 , 这句代码执行完毕后 , 匿名对象会自动销毁 , 下一行代码无法访问 上一行代码 创建的 匿名对象 ;

    下面的代码中 , 创建了 Student 类型的 匿名对象 , 并调用了该对象的 printfInfo 成员方法 ;

    	// 创建匿名对象, 并执行匿名对象函数
    	Student(12, 170).printfInfo();
    
    • 1
    • 2

    " 匿名对象 " 通常只在创建它的语句中使用 , 并且在语句结束时会被销毁 ;

    " 匿名对象 " 不适用于需要 在多个语句之间保持持久性的情况 ;


    3、代码示例 - 创建并使用匿名对象


    创建匿名对象核心代码 : 创建了 Student 类型的匿名对象后 , 调用该匿名对象的函数 ; 这句代码执行完毕后 , 匿名对象就无法访问了 , 因为匿名对象的作用域仅限于其所在的表达式中 ;

    	// 创建匿名对象, 并执行匿名对象函数
    	Student(12, 170).printfInfo();
    
    • 1
    • 2

    代码示例 :

    #include "iostream"
    using namespace std;
    
    class Student
    {
    public:
    
    	// 带参构造函数
    	Student(int age, int height)
    	{
    		m_age = age;
    		m_height = height;
    		cout << "调用带参数构造函数" << endl;
    	}
    
    	// 打印学生信息
    	void printfInfo()
    	{
    		cout << "学生信息 : 年龄 = " << m_age  << " , 身高 = " << m_height << endl;
    	}
    
    	Student(const Student& s)
    	{
    		m_age = s.m_age;
    		m_height = s.m_height;
    		cout << "调用拷贝构造函数" << endl;
    	}
    
    public:
    	int m_age;		// 年龄
    	int m_height;	// 身高
    };
    
    int main()
    {
    	// 创建匿名对象, 并执行匿名对象函数
    	Student(12, 170).printfInfo();
    
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    执行结果 :

    调用带参数构造函数
    学生信息 : 年龄 = 12 , 身高 = 170
    Press any key to continue . . .
    
    • 1
    • 2
    • 3

    在这里插入图片描述

  • 相关阅读:
    NETPLIER : 一款基于概率的网络协议逆向工具(一)理论
    分享一个基于python的个性推荐餐厅系统源码 餐厅管理系统代码
    计算机视觉+人工智能面试笔试总结——深度学习基础
    docker安装sql-server数据库,使用navicat实现备份数据库导入
    PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口
    树莓派换内存卡系统了远程没用用了怎么解决
    八家知名大厂联合手写的Java面试手册刚上线,竟就到达巅峰?
    App分发的原理ipa分发系统需求
    低代码物联网平台的业务应用场景有哪些?
    Kibana忘记初始密码怎么办?
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132870219
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号