【C++コア】具体的な応用と機能改善

1.機能

1.1 概要

機能:頻繁に使用されるコードをカプセル化して、コードの繰り返しを減らします。より大きなプログラムは通常、いくつかのプログラム ブロックに分割され、各モジュールが特定の機能を実装します。

1.2 関数の定義

関数の定義は通常、次の 5 つのステップで構成されます。
1. 戻り値の型
2. 関数名
3. パラメーター リスト
4. 関数本体のステートメント
5. 戻り値の式

文法:

返回值类型 函数名 (参数列表)
{
    
    
       函数体语句
       return 表达式
}
  • 戻り値の型: 関数は値を返すことができます。関数定義内で
  • 関数名: 関数に名前を付けます
  • パラメータリスト: この関数を使用する場合、渡されるデータは
  • 関数本体のステートメント: 中括弧内のコード、関数内で実行する必要があるステートメント
  • return 式: 戻り値の型にリンクされ、関数が実行された後、対応するデータが返されます。

例: 2 つの数値を加算する加算関数を定義します。

//函数定义
int add(int num1, int num2)
{
    
    
	int sum = num1 + num2;
	return sum;
}

1.3 関数呼び出し

関数:定義された関数を使用します

文法: 函数名(参数)

例:

#include<iostream>
using namespace std;
   
//函数定义
int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参
{
    
    
	int sum = num1 + num2;
	return sum;
}

int main() {
    
    

	int a = 10;
	int b = 10;
	//调用add函数
	int sum = add(a, b);//调用时的a,b称为实际参数,简称实参
	cout << "sum = " << sum << endl;

	a = 100;
	b = 100;

	sum = add(a, b);
	cout << "sum = " << sum << endl;

	return 0;
}

概要: 関数定義内の括弧は仮パラメータと呼ばれ、関数の呼び出し時に渡されるパラメータは実パラメータと呼ばれます。

1.4 値渡し

  • いわゆる値渡しとは、関数が呼び出されたときに、実パラメータが値を仮パラメータに渡すことを意味します。
  • 値が渡されると、仮パラメータが発生しても、実パラメータには影響しません。

例:

#include<iostream>
using namespace std;

void swap(int num1, int num2)
{
    
    
	cout << "交换前:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	int temp = num1;
	num1 = num2;
	num2 = temp;

	cout << "交换后:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	//return ; 当函数声明时候,不需要返回值,可以不写return
}

int main() {
    
    

	int a = 10;
	int b = 20;

	swap(a, b);

	cout << "mian中的 a = " << a << endl;
	cout << "mian中的 b = " << b << endl;

	return 0;
}

概要: 値で渡す場合、仮パラメータは実際のパラメータを変更できません

1.5 関数の一般的なスタイル

一般的な関数スタイルは 4 つあります。

  1. 返品不可
  2. 参加してもリターンなし
  3. 参加せずに返却
  4. 参加して帰る

例:

#include<iostream>
using namespace std;

//函数常见样式
//1、 无参无返
void test01()
{
    
    
	//void a = 10; //无类型不可以创建变量,原因无法分配内存
	cout << "this is test01" << endl;
	//test01(); 函数调用
}

//2、 有参无返
void test02(int a)
{
    
    
	cout << "this is test02" << endl;
	cout << "a = " << a << endl;
}

//3、无参有返
int test03()
{
    
    
	cout << "this is test03 " << endl;
	return 10;
}

//4、有参有返
int test04(int a, int b)
{
    
    
	cout << "this is test04 " << endl;
	int sum = a + b;
	return sum;
}

1.6 関数の宣言

関数:関数の名前と関数の呼び出し方法をコンパイラーに指示します。関数の実際の本体は個別に定義できます。関数は複数回宣言できますが、関数を定義できるのは 1 回だけです

例:

#include<iostream>
using namespace std;

//声明可以多次,定义只能一次
//声明
int max(int a, int b);
int max(int a, int b);
//定义
int max(int a, int b)
{
    
    
	return a > b ? a : b;
}

int main() {
    
    

	int a = 100;
	int b = 200;

	cout << max(a, b) << endl;

	return 0;
}

1.7 関数を別のファイルに記述する

機能:コード構造を明確にする

関数ファイルを作成するには通常 4 つの手順があります

  1. 拡張子 .h が付いたヘッダー ファイルを作成します。
  2. 拡張子が .cpp のソース ファイルを作成します。
  3. ヘッダファイルに関数宣言を記述する
  4. 関数の定義をソースファイルに書き込む

例:

//swap.h文件
#include<iostream>
using namespace std;

//实现两个数字交换的函数声明
void swap(int a, int b);

//swap.cpp文件
#include "swap.h"

void swap(int a, int b)
{
    
    
	int temp = a;
	a = b;
	b = temp;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}
//main函数文件
#include "swap.h"
int main() {
    
    

	int a = 100;
	int b = 200;
	swap(a, b);
	
	return 0;
}

2.機能改善

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

C++ では、関数の仮パラメータ リスト内の仮パラメータにデフォルト値を設定できます。
文法: 返回值类型 函数名 (参数= 默认值){}

例:

#include<iostream>
using namespace std;

int func(int a, int b = 10, int c = 10) {
    
    
	return a + b + c;
}

//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
    
    
	return a + b;
}

int main() {
    
    

	cout << "ret = " << func(20, 20) << endl;
	cout << "ret = " << func(100) << endl;

	return 0;
}

2.2 関数のプレースホルダパラメータ

C++ の関数の仮パラメータ リストには、プレースホルダとして使用されるプレースホルダ パラメータが存在する場合があり、関数が呼び出されるときにその場所を埋める必要があります。

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

例:

#include<iostream>
using namespace std;

//函数占位参数 ,占位参数也可以有默认参数
void func(int a, int) {
    
    
	cout << "this is func" << endl;
}

int main() {
    
    

	func(10,10); //占位参数必须填补

	return 0;
}

2.3 関数のオーバーロード

関数:関数名は同じにすることができ、再利用性が向上します。

関数のオーバーロードは次の条件を満たします。

  • 同じ範囲内で
  • 同じ関数名
  • 関数パラメータのタイプ数値順序が異なります。

注:関数の戻り値を関数のオーバーロードの条件として使用することはできません。

例:

#include<iostream>
using namespace std;

//函数重载需要函数都在同一个作用域下
void func()
{
    
    
	cout << "func 的调用!" << endl;
}
void func(int a)
{
    
    
	cout << "func (int a) 的调用!" << endl;
}
void func(double a)
{
    
    
	cout << "func (double a)的调用!" << endl;
}
void func(int a ,double b)
{
    
    
	cout << "func (int a ,double b) 的调用!" << endl;
}
void func(double a ,int b)
{
    
    
	cout << "func (double a ,int b)的调用!" << endl;
}

//函数返回值不可以作为函数重载条件
//int func(double a, int b)
//{
    
    
//	cout << "func (double a ,int b)的调用!" << endl;
//}


int main() {
    
    

	func();
	func(10);
	func(3.14);
	func(10,3.14);
	func(3.14 , 10);

	return 0;
}

知らせ:

  • 過負荷条件としての参照
  • 関数のオーバーロードで関数のデフォルト パラメーターが発生する

例:

#include<iostream>
using namespace std;

//函数重载注意事项
//1、引用作为重载条件

void func(int &a)
{
    
    
	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 << "func2(int a, int b = 10) 调用" << endl;
}

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

int main() {
    
    
	
	int a = 10;
	func(a); //调用无const
	func(10);//调用有const


	//func2(10); //碰到默认参数产生歧义,需要避免

	return 0;
}

おすすめ

転載: blog.csdn.net/cui_yonghua/article/details/131363214