記事ディレクトリ
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 . . .