• 【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )






    一、匿名对象引入



    匿名对象引入 : 在上一篇博客 【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

    在这里插入图片描述

  • 相关阅读:
    萝卜快跑:隐私与安全并重的无人驾驶之旅
    BUUCTF Java逆向解密 1
    套接字选项
    Shannon理论
    信创产业快速发展,开发者应该了解什么?
    【数据结构】栈
    我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")
    FPGA时序约束(一)基本概念入门及简单语法
    什么样的触达方式,会员会喜欢?
    阿里云开发者社区有奖征文活动,期待您出文相助
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132870219