記事のディレクトリ
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;
}
関数のオーバーロードに関する注意
- 過負荷状態として引用された場合
- 関数のオーバーロードで関数のデフォルトパラメータが発生する
例
#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 ++チュートリアル