【C++】匿名オブジェクト① (匿名オブジェクトの概要 | 匿名オブジェクトの概要 | 匿名オブジェクトの概念 | 匿名オブジェクトのスコープ - オブジェクトの作成と破棄)





1. 匿名オブジェクトの導入



匿名オブジェクトの導入:前回のブログ【C++】コンストラクタのコピー呼び出しタイミング②(関数の引数としてのオブジェクトの値 | 関数の戻り値としてのオブジェクトの値) で、関数の戻り値としてクラスオブジェクトを使用する場合、返されるものは関数内で作成されたクラス インスタンス オブジェクトのコピーであり、本質的には匿名オブジェクトです。


関数の戻り値としてのオブジェクト値:関数は 、ポインターや参照を返すのではなく、クラスのインスタンス オブジェクト値を直接返します。

// 定义函数, 返回 Student 对象值作为返回值
Student fun()
{
    
    
	Student s1(18, 170);
	return s1;
}




2. 匿名オブジェクトの概要




1. 匿名オブジェクトの概念


C++言語では、

「匿名オブジェクト」とは、明示的に指定された名前のないクラスのインスタンス オブジェクトを指します。

匿名オブジェクトは、一時的な計算に使用されたり、関数のパラメーター/戻り値として渡されたりすることがよくあります。


匿名オブジェクト作成構文:

类名(构造函数参数)

次のコードは、Student クラスの匿名オブジェクトを作成するものです。

Student(12, 170)

2. 匿名オブジェクト スコープ - オブジェクトの作成と破棄


匿名オブジェクトのスコープは、匿名オブジェクトを作成するコードに制限されています。このコードが実行されると、匿名オブジェクトは自動的に破棄され、次のコード行は前のコード行で作成された匿名オブジェクトにアクセスできなくなります。

次のコードでは、Student 型の匿名オブジェクトが作成され、オブジェクトの printfInfo メンバー メソッドが呼び出されます。

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

「匿名オブジェクト」は通常、それを作成するステートメント内でのみ使用され、ステートメントの最後に破棄されます。

「匿名オブジェクト」は、複数のステートメントにわたる永続性が必要な状況には適していません。


3. コード例 - 匿名オブジェクトの作成と使用


匿名オブジェクトを作成するためのコア コード: Student 型の匿名オブジェクトを作成した後、匿名オブジェクトの関数を呼び出します。このコードの実行後は、匿名オブジェクトのスコープが次の式に制限されているため、匿名オブジェクトにアクセスできません。それはどこにありますか。

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

コード例:

#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;
}

の結果:

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

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/han1202012/article/details/132870219