首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )

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

作者头像
韩曙亮
发布于 2023-10-15 17:04:50
发布于 2023-10-15 17:04:50
1.3K0
举报

一、匿名对象引入

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

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

代码语言:javascript
复制
// 定义函数, 返回 Student 对象值作为返回值
Student fun()
{
	Student s1(18, 170);
	return s1;
}

二、匿名对象简介

1、匿名对象概念

在 C++ 语言中 ,

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

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

匿名对象创建语法 :

代码语言:javascript
复制
类名(构造函数参数)

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

代码语言:javascript
复制
Student(12, 170)

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

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

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

代码语言:javascript
复制
	// 创建匿名对象, 并执行匿名对象函数
	Student(12, 170).printfInfo();

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

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

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

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

代码语言:javascript
复制
	// 创建匿名对象, 并执行匿名对象函数
	Student(12, 170).printfInfo();

代码示例 :

代码语言:javascript
复制
#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;
}

执行结果 :

代码语言:javascript
复制
调用带参数构造函数
学生信息 : 年龄 = 12 , 身高 = 170
Press any key to continue . . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、匿名对象引入
  • 二、匿名对象简介
    • 1、匿名对象概念
    • 2、匿名对象作用域 - 对象创建与销毁
    • 3、代码示例 - 创建并使用匿名对象
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档