2021-01-27クロックインしてC ++を学習する7日目


1つは、C ++での参照

1.参照の基本的な使用

エイリアス変数
文法:数据类型 &别名 = 原名

#include<iostream>
using namespace std;

int main()
{
    
    
	int a = 10;
	int &b = a;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	a = 100;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	b = 200;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	
	system("pause");
	return 0;

}

出力結果
ここに画像の説明を挿入

2.引用に関する注意

  • 参照を初期化する必要があります

  • 参照が初期化された後は、変更できません

#include<iostream>
using namespace std;

int main()
{
    
    
	//int &a;//错误,引用必须初始化,展示是谁的别名
	int a = 10;
	int b = 20;
	int &c = a;

	//引用 在初始化后不可更改
	c = b;//这是正确的,因为这是赋值操作

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;

	system("pause");
	return 0;

}

出力結果
ここに画像の説明を挿入

3.関数パラメーターとして引用

関数にパラメーターが渡されると、参照の手法を使用して、仮パラメーターに実際のパラメーターを変更させることができます。
ポインタを単純化して実際のパラメータを変更できます

(住所配達と同様)

#include<iostream>
using namespace std;

//1、值传递
void swap01(int a, int b)
{
    
    
	int temp = a;
	a = b;
	b = temp;
	cout << "swap01a = " << a << endl;
	cout << "swap01b = " << b << endl;
}

//2、地址传递
void swap02(int *a, int *b)
{
    
    
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << "swap02 a = " << *a << endl;
	cout << "swap02 b = " << *b << endl;
}

//3、引用传递
void swap03(int &a, int &b)
{
    
    
	int temp = a;
	a = b;
	b = temp;
	cout << "swap03 a = " << a << endl;
	cout << "swap03 b = " << b << endl;
}

int main()
{
    
    
	int a = 10;
	int b = 20;
	swap01(a, b);
	cout << "01 a = " << a << endl;
	cout << "01 b = " << b << endl;

	swap02(&a, &b);
	cout << "02 a = " << a << endl;
	cout << "02 b = " << b << endl;

	swap03(a, b);
	cout << "03 a = " << a << endl;
	cout << "03 b = " << b << endl;

	system("pause");
	return 0;

}

出力結果
ここに画像の説明を挿入

4.関数の戻り値として参照

関数の戻り値として参照が存在する可能性があります
[注]ローカル変数参照を返さないでください。
使用法:関数呼び出しは左辺値として使用されます

#include<iostream>
using namespace std;

//不要返回局部变量的引用
int& test01()  //相当于用引用的方式返回
{
    
    
	int a = 10;
	return a;
}

int& test02()
{
    
    
	static int a = 10;//静态变量存放在全局区,不会自动释放
	return a;
}

int main()
{
    
    
	int &ref = test01();
	cout << "ref = " << ref << endl;//第一次结果正确,以为编译器对其值进行保留
	//cout << "ref = " << ref << endl;//第二次结果错误,因为该值已被释放

	int &ref02 = test02();
	cout << "ref02 = " << ref02 << endl;//不论再次调用多少次,都会正常执行
	cout << "ref02 = " << ref02 << endl;

	system("pause");
	return 0;

}

参照の本質:これは、C ++で実装されたポインター定数です。

ポインタ定数:ポインタのポイントは変更できませんが、ポインタの値は変更できます

定数参照:主に、誤操作を防ぐために正式なパラメータを変更するために使用されます
関数リストで、constを追加して正式なパラメーターを変更し、正式なパラメーターが実際のパラメーターを変更しないようにすることができます。constを追加
すると、読み取り専用になり、変更できなくなります(アドレス転送と同様)。

2、機能改善

1.関数のデフォルトパラメータ

C +++では、関数の仮パラメーターリストの仮パラメーターにデフォルト値を設定できます

文法:返回值类型 函数名 (参数 = 默认值){ }

関数宣言と関数実装には、デフォルトのパラメーターを1つだけ含めることができます

#include<iostream>
using namespace std;

int func(int a, int b, int c );  //函数声明

int main()
{
    
    
	cout << "不给默认值传入参数";
	cout << func(10) << endl;

	cout << "给默认值传入参数";
	cout << func(10,20) << endl;
	
	system("pause");
	return 0;

}

//函数实现
//如果自己在主函数中传入参数,则就用传入的参数,如果没有传入,则用默认值
int func(int a, int b = 10, int c = 30) //如果给了b默认参数,则b右边的参数都得有默认参数
{
    
    
	return a + b + b;
}

2.関数プレースホルダーパラメーター

C ++の関数の仮パラメーターリストにプレースホルダーパラメーターを含めることができます。これはプレースホルダーとして使用され、関数が呼び出されたときに位置を入力する必要があります。

文法:返回值类型 函数名 (数据类型) { }

#include<iostream>
using namespace std;

//占位参数
void func1(int a, int  )
{
    
    
	cout << "hello world" << endl;
}
//占位参数可以有默认值
void func2(int a, int = 10)
{
    
    
	cout << "hello world" << endl;
}

int main()
{
    
    
	func1(10, 1);//占了位就必须往里面传数
	func2(10); //占位参数有默认值时,可以不传入数据

	
	system("pause");
	return 0;

}

3.パラメータの過負荷

再利用性を向上させるために、関数名を同じにすることができます

関数のオーバーロードは条件を満たす

  • 同じスコープで

  • 同じ関数名

  • 関数パラメーターのタイプが異なるか、数が異なるか、順序が異なります

関数の戻り値は、関数のオーバーロードの条件として使用できません

#include<iostream>
using namespace std;

//1、func函数都在全局域
//2、函数名不同
//参数类型不同    符合函数重载条件
void func()
{
    
    
	cout << "func 的调用" << endl;
}

void func(int a)
{
    
    
	cout << "有参数的func 调用" << endl;
}

int main()
{
    
    
	
	func();
	func(10);
	system("pause");
	return 0;

}

関数のオーバーロードに関する注意

  1. 過負荷状態として引用された場合
  2. 関数のオーバーロードで関数のデフォルトパラメータが発生する

#include<iostream>
using namespace std;

//1、引用作为重载条件
void func(int &a) //int &a=10;是不合法的语法,所以腐女吧(10)无法调用此函数
{
    
    
	cout << "func(int &a) 的调用" << endl;
}

void func(const int &a)
{
    
    
	cout << "func(const int &a) 的调用" << endl;
}

//2、函数重载碰到默认参数
void func2(int a,int b = 10)
{
    
    
	cout << "func(int a,int b) 的调用" << endl;
}

void func2(int a)
{
    
    
	cout << "func(int a) 的调用" << endl;
}

int main()
{
    
    
	int a = 10;
	func(a); 
	func(10);

	//func2(10);//当函数重载有默认参数时,出现两个够可以调用的情况,会出错

	system("pause");
	return 0;

}

[注]学習コースは-ダークホースプログラムC ++チュートリアル

おすすめ

転載: blog.csdn.net/qq_42616280/article/details/113244708